« SQLite本 | メイン | MeCab の設定ファイル »

2006年02月19日

Web関連の開発日誌:: MeCab (和布蕪) 辞書の構築

    

Sennaでは MeCab が使われているけど、 MeCab の辞書は約38MBもある。
どうしたものか。
調べてみると、かかしは2MBで茶筅は12MBだった。

そこで、何とかしようととりあえずは MeCab の辞書を再構築することにした。
標準では EUC になっているので、まずはこれを UTF-8 にすることに。

以下は、 mecab-0.90rc9 での話。

初めこのページを参照して辞書の再構築をしていたのだが、どうもうまくいかない。
品詞などが文字化けしていまう。
しばらくして、このページが最新の情報だと気付いた。
が、そうだと気付いても辞書の再構築方法は全然わからず、相変わらず文字化けしてしまっていた。
問題は、dicrc ファイルの

dictionary-charset = utf8

dicrc ファイルのdictionary-charsetは、辞書構築前に変更してはいけない。
変換を行うperlスクリプトを追っていて気付いたのだが、ここで指定されている文字コードがcsvファイルの文字コードだと認識され、この文字コードから指定した文字コードに変換される。
つまり、

dictionary-charset = utf8

と指定すると変換が行われない。
ここは、euc-jpである必要がある。
で、辞書構築終了後、

make dicdir=./ipadic install

でコピーを行い、コピーした先のdicrc ファイルで変更を行う。

後、configure & make を使う場合、

./configure --with-charset=utf8 make

としても、辞書はutf8で作られない。
make途中で

/mecab-dict-index -c utf-8

と言うような箇所があるのだが、上記のようにすると-c utf8となって、これだとeucの辞書が出来てしまう。
makeではなく、

/mecab-dict-index -c utf-8

を直接指定して辞書を作る必要がある。
また、configureは

./configure --with-charset=utf8

ではなく、

./configure --with-charset=utf8 --with-mecab-config=../

としないとmecab-configが見つからないと言われる。
また、Winだと

/mecab-dict-index

は、

perl mecab-dict-index

としないとうまくいかない。

これで何とかUTF-8の辞書が出来た。
すごい時間がかかってしまった。
でも、辞書のサイズは50MBに。
まあ、UTF-8にしたので大きくなるのは当然。

SennaがどのようにMeCab を使っているか見てみると、単に分かち書きをするために使っているようだ。
と言うことは、品詞などのデータは要らない。
これで辞書を小さく出来そうだと思って、mecab-dict-indexを書き換えることを考えながらソースを見ると、-wと言うオプションがあり、これを指定すると分かち書き用の辞書になるようだ。
これで作ると辞書は20MBになった。
後、libmecab.dll が 3.3MB と言うのもでかい。
ソースを見るとucstable.hが妙にでかい。どうも文字コード関連のテーブルのようだ。
ソースを追うとMECAB_USE_UTF8_ONLYと言うデバッグオプション発見。
これを指定してmakeすると276KBになった。
で、辞書とこのDLLをZIPで圧縮すると6.8MBになった。
これぐらいなら配布出来なくはないかな。
まだ大きいことには変わりないけど。
事前にインデックスを作っておき、検索文字列を分割しないような用途であれば辞書を配布しなくていいんだけどなぁ。



投稿者 Takenori : 2006年02月19日 18:07




comments powered by Disqus
Total : Today : Yesterday : なかのひと