最近、またMecab使ってるんですが、Mecabはそのまま使うと凄く細かく分解されちゃって結構使いにくい。形態素解析したい文章である程度の単語のまとまりのままにしたい場合はユーザー辞書作るのが手っ取り早い。
C#でNMecab使う場合を想定。NMecabはNugetでインストール。
辞書作るときは、本家のサイトからWindows用をダウンロードしてインスト。
そしたら↓の感じのCSVで登録した単語の一覧を作る。例えば「chacha.csv」っていうファイル名で保存した場合。
ジャスミン茶,,,10,名詞,一般,*,*,*,*,独自辞書,ヨミ,ハツオン ウーロン茶,,,10,名詞,一般,*,*,*,*,独自辞書,ヨミ,ハツオン
フォーマットは↓の感じらしい。自分は原型のところに分かりやすいように自分の辞書っていうのがわかる文字を入れてる。
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
そしたら、↓コマンドでコンパイルして辞書ファイルを作る。フォルダはインストールしたフォルダを適当に。
cd C:\Program Files (x86)\MeCab\bin mecab-dict-index -d "C:\Program Files (x86)\MeCab\dic\ipadic" -u "C:\Program Files (x86)\MeCab\dic\userdic\chacha.dic" -f shift-jis -t utf-8 "C:\Program Files (x86)\MeCab\dic\userdic\chacha.csv"
オプションとかは「mecab-dict-index -h」でヘルプ見た方が早い。
で、読み込みのCSVはSJISでいいと思うんだけど、dicファイルの方はUTF8指定しておかないと、プログラム側で読み込むときにエラーになる。。。あと、CSVファイルの最後は改行入れない方がいい。
dicファイルが出来たらプログラム側の適当なフォルダに入れて、↓の感じでMeCabParamを作る。
MeCabParam mPara = new MeCabParam(); //まず、システム辞書があるフォルダの指定 mPara.DicDir = @"C:\*******\dic\ipadic"; //そしたら、ユーザ辞書ファイルを下の感じで指定 List<string> wkList = new List<string>(); //複数指定可 wkList.Add(@"C:\*******dic\userdic\chacha.dic"); //MeCabParamにセット mPara.UserDic = wkList.ToArray();
↑はプログラム内でやってるけど、app.configとかで外だしもできるっぽ。
で、ほぼやりたい感じには上記でなるんだけど、コストの指定とかもう少し理解したいところ。まだ困ってないのは、大した解析やってないからでしょうし。。。