形態素解析がしたくなり調べていたところ、MeCabの.Net版として作られた NMeCab (サイト) を見つけた。
これに、Wikipediaとはてなの辞書を追加し自分のソフトウェアで利用するまでの話。
環境は
Windows7 Pro 64bit
Visual Studio 2010 Pro
まず、Wikipediaとはてなの辞書を作成する。
そのためにこちらのサイトを参考にさせていただきました。ありがとうございます。
『MeCabにユーザ辞書を追加する。』 タチコマ好きなエンジニアのブログ
こちらの記事はLinux向けに書かれているので、Windowsでの操作。
辞書を作成する
【3. ユーザ辞書のコンパイル】から
Mecabのインストール先はデフォルトで、
PATHが
C:\Program Files (x86)\MeCab\bin
に設定されていて
辞書はIPAが入っているとする。
カレントディレクトリは、csvファイルが置いてある場所。
mecab-dict-index -d C:\Program Files (x86)\MeCab\dic\ipadic -u hatena-keyword.dic -f utf-8 -t utf-8 hatena_userdic.csv mecab-dict-index -d C:\Program Files (x86)\MeCab\dic\ipadic -u wikipedia-keyword.dic -f utf-8 -t utf-8 wikipedia_userdic.csv
すると、カレントディレクトリに二つの辞書ファイルが出力される。
NMeCabの中に辞書ファイルをコピー
NMeCabはプロジェクトで既に読み込まれているものとする。
プロジェクトの、lib\dic\ipadic に
C:\Program Files (x86)\MeCab\dic\ipadic
の中身をすべてコピーする。
ついでに先ほど作成した二つの .dic ファイルも lib\dic\ipadic へ入れる。
.configファイルに設定を記述する。
もし new MeCabParam(); などで DicDirを設定している場合は削除して大丈夫です。
プロジェクトで App.config を作成していない人は
● NMeCabからコピー
NMeCabのフォルダ -> src\ -> WindowsFormSample\ -> app.config
をプロジェクトに追加
又は
● 自分で作成
[プロジェクト名] を右クリック
[追加] -> [新しい項目] -> [アプリケーション構成ファイル]
作成したら、中身を以下のように書き換える
<?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <section name="NMeCab.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> </sectionGroup> </configSections> <applicationSettings> <NMeCab.Properties.Settings> <setting name="DicDir" serializeAs="String"> <value>..\..\lib\dic\ipadic</value> </setting> <setting name="UserDic" serializeAs="String"> <value>hatena-keyword.dic, wikipedia-keyword.dic</value> </setting> </NMeCab.Properties.Settings> </applicationSettings> </configuration>
それぞれの value の階層は人によって違うため ..\ の数を調整しましょう。
UserDic の value は、DicDir が基準になっています。
上記の例だと
..\..\lib\dic\ipadic\hatena-keyword.dic
が参照されます。
簡単なソースぺたり。 ..フォームアプリケーションです。
using System; using System.Windows.Forms; using NMeCab; namespace post_346_nmecab { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) {} private void text_analysis() { try { string txt = ""; tAnalysed.Clear(); MeCabTagger t = MeCabTagger.Create(); MeCabNode n = t.ParseToNode(tBaseString.Text); while (n != null) { if (n.CharType > 0) { txt += n.Surface + "\t" + n.Feature + Environment.NewLine; } n = n.Next; } tAnalysed.Text = txt; } catch (Exception e) { MessageBox.Show(e.ToString(), "エラー☆", MessageBoxButtons.Yes, MessageBoxIcon.Error); this.Close(); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { } private void bAnalysis_Click(object sender, EventArgs e) { text_analysis(); } } }
でも、大きなファイルを解析するときは、マルチスレッドに対応させた方がいいと思います。
おわり