形態素解析がしたくなり調べていたところ、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();
}
}
}
でも、大きなファイルを解析するときは、マルチスレッドに対応させた方がいいと思います。
おわり