MeCabにWikipedia辞書を追加
MeCabは自然言語処理の分野でよく使われる形態素解析ツールです。
ただ、辞書には一般的な単語しか登録されていないため、
Twitterなどを解析する場合はそのままだとあまり精度がよくありません。
そこで、今回はWikipediaの記事のタイトルを辞書として追加することで対応してみます。
追記: 最近は、mecab-ipadic-neologd
なるものがオープンソースで存在しており、
それらは十分な辞書数でありながらノイズも少ないので、そちらがオススメです。(ドキュメントもわかりやすいです)
参考になるサイト
- MeCab: Yet Another Part-of-Speech and Morphological Analyzer
- 公式ドキュメントです。
- fukushimuのメモ帳 [mecab] mecab辞書にwikipediaのタイトルリストを追加 [wikipedia][はてなキーワード]
- MeCabにユーザ辞書を追加する - tSeiya's blog
- 参考にさせていただいたサイトさんです。
インストール
インストールしてない場合は、公式ドキュメントに従い、インストール。
追記:brew install mecab mecab-ipadic
が正直楽です。
あと、バインディングもvirtualenvに入れたいなら、タルボールをpipで入れる方が良い。
MeCab
./configure
make
sudo make install
IPA辞書
辞書の文字コードにだけは注意してください。
./configure --with-charset=utf8 make sudo make install
バインディング
READMEが入っているので、それに従ってインストール。
python setup.py build
sudo python setup.py install
手順
やることはWikipediaのタイトル一覧テキストを整形してMeCab辞書に変換するだけです。
Wikipediaタイトル一覧
- jawiki-latest-all-titles-in-ns0.gz
- 常に最新版です。他にも色々なデータがここに置いてあります。
落としたら解凍しましょう。
gunzip jawiki-latest-all-titles-in-ns0.gz
タイトルの整形
MeCabを使う上でアルファベットは小文字・全角カタカナ・記号や数字は半角で統一しようと考えているので(Unicode正規化-NFKC)、
タイトルのテキストファイルをフォーマットしておきます。
CSVファイルを作成
辞書を作るにはコストなどの情報を加えてCSVファイルに変換する必要が有ります。
perlスクリプトは上記サイトさんを参考に、少し改変しました。
(さらに改変したい場合はバインディングの使い方を参照してください)
ただし、CSVを作る際
- 必要の無い単語はパス
- Wikipediaのタイトルでは空白をアンダーバーとして表記しているので元に戻す
- 既に辞書に登録されている単語は上書きしない
などの処理をしています。
また、コスト(MeCabが形態素解析時に参考にする各単語の固有値)も設定していますが、単語長に少し比例する以外はかなりざっくりした設定なので、
調整した方が良いかもしれません。
辞書ファイルを生成・追加
CSVファイルを辞書ファイルに変換します。
$ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic \ > -u wikipedia.dic -f utf8 -t utf8 wikipedia.csv
あとは/usr/local/etc/mecabrc
を編集してユーザ辞書として登録するだけです。
userdic = /home/user/Documents/wikipedia.dic
追記
作成した辞書で色々試していたのですが、
名探偵コナン->名探偵コナン 攻殻機動隊->攻殻+機動隊
となってしまいました。これは、攻殻と機動隊が両方ともwikipedia_wordとして登録されているため、
それらを足したコストが攻殻機動隊単体のコストよりも低くなっているのが原因と考えられます。
荒療治ではありますが、コストの計算で、単語長の1.5乗だったのを2乗に変えると無事改善しました。
また、僕も最初ひっかかってしまったのですが、
以前ユーザ辞書を作って追加した事がある人は、一旦それを解除してスクリプトを実行してください。