午後から→オーバークロック

駆け出しハッカー()によるプログラミング・サービス開発備忘録。

MeCabにWikipedia辞書を追加

f:id:nemupm:20140926043559j:plain

MeCab自然言語処理の分野でよく使われる形態素解析ツールです。
ただ、辞書には一般的な単語しか登録されていないため、
Twitterなどを解析する場合はそのままだとあまり精度がよくありません。

そこで、今回はWikipediaの記事のタイトルを辞書として追加することで対応してみます。

追記: 最近は、mecab-ipadic-neologdなるものがオープンソースで存在しており、 それらは十分な辞書数でありながらノイズも少ないので、そちらがオススメです。(ドキュメントもわかりやすいです)

参考になるサイト

インストール

インストールしてない場合は、公式ドキュメントに従い、インストール。
追記: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タイトル一覧

落としたら解凍しましょう。

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乗に変えると無事改善しました。

また、僕も最初ひっかかってしまったのですが、
以前ユーザ辞書を作って追加した事がある人は、一旦それを解除してスクリプトを実行してください。