mecabに単語を登録

mecabで固有名詞を処理してゆきたいので、ユーザ辞書登録をしてみる。システム辞書登録もできるみたいだが、頻度が多く数が多いので、任意のタイミングで追加できるユーザ辞書タイプがいいと考えた。

辞書登録するにはまずは、登録用のcsvを作る。文字コードはUTF8にした。

フォーマットは以下の通り。

表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音

最後の発音の後ろに任意の情報を追加できるらしいので「ユーザ登録」と入れてみた。

カタンの開拓,-1,-1,10,名詞,一般,*,*,*,*,カタンの開拓,かたんのかいたく,かたんのかいたく,ユーザ登録

これを辞書バイナリに変換する。変換はmecab-dic-indexを使う。書式は以下の通り。

$ mecab-dict-index -d システム辞書のあるディレクトリ -f csv文字コード -t 作成するバイナリ辞書の文字コード 作成するバイナリファイル辞書

今回作成した辞書は以下のとおり

$ /Users/名前/App/mecab/libexec/mecab/mecab-dict-index 
 -d /Users/名前/App/mecab/lib/mecab/dic/ipadic
 -f utf8 -t utf8
 -u /Users/名前/App/mecab/dic/user.dic /Users/名前/App/mecab/dic/user.csv 
reading /Users/名前/App/mecab/dic/user.csv ... 1
emitting double-array: 100% |###########################################| 

done!

このユーザ辞書を利用するように設定に追加する。

/Users/名前/App/mecab/lib/mecab/dic/ipadic/dicrcに以下の定義を追加
;UserDic
userdic = /Users/名前/App/mecab/dic/user.dic

これでユーザ辞書が登録されたはずなので、テストしてみる。

$ /Users/名前/App/mecab/bin/mecab
カタンの開拓
カタンの開拓	名詞,一般,*,*,*,*,カタンの開拓,かたんのかいたく,かたんのかいたく,ユーザ登録
EOS

無事に認識できてる。英語の固有名詞に関しても登録してみる。

カタンの開拓,-1,-1,10,名詞,一般,*,*,*,*,カタンの開拓,かたんのかいたく,かたんのかいたく,ユーザ登録
The Settlers of Catan,-1,-1,10,名詞,一般,*,*,*,*,カタンの開拓,かたんのかいたく,かたんのかいたく,ユーザ登録

これで辞書登録をもう一度行って、テストしてみる。

$ ./mecab
The Settlers of Catan is Good
The Settlers of Catan	名詞,一般,*,*,*,*,カタンの開拓,かたんのかいたく,かたんのかいたく,ユーザ登録
is	名詞,一般,*,*,*,*,*
Good	名詞,固有名詞,組織,*,*,*,*
EOS

名詞でうまく解析されている。これなら使えそうな気がしてきた。つぎはRubyからの処理だな。