MeCab の Python モジュール

eric-n さんがいま統計的機械翻訳のデモを作っていて、とりあえずエンコーダで日本語と英語の単語同士を対応づけるために、日本語側を文単位で毎回 ChaSen にかけて分かち書きをしていた(日本語は ChaSen のような形態素解析器というものを使わないと単語と単語の切れ目が分からないので英語と対応づけられない)のだが、Python から毎回コマンドを実行しているととても遅いので、Python モジュールとして組み込みで使えるものはないだろうか、という話が来た。

とりあえず Python から ChaSen が使えるかどうか知らなかった(nozomi-k さんによると以前はあったらしいのだが)ので、同じく形態素解析器の MeCab + MeCab についてくる Python モジュールを使うか、もしくはこれも松本研で作っている構文解析器の CaboCha の Python モジュールを形態素解析モードで使うといいのでは、という話に。CaboCha に係り受け解析をさせるとき大量の文を一気に食わせるとどうも変になる、という話で shuya-a さんと通じ合ってしまった(自分は Perl から shuya-a さんは Python から使っていたのだけど)。自分は2日くらい悩んでそのまま諦めたのだが、shuya-a さんによると、CaboCha も形態素解析モードだと変にならないが、なんか ChaSen の結果を一時的に溜めておくところのバッファリングがどうもおかしいらしい。

そういう話をすると eric-n さんはとりあえず MeCab を使ってみたいから入れてほしい、ということで研究室の計算機にインストール。以前入れようとして ipadic (MeCab とか ChaSen で使っている辞書)を MeCab 形式に変換するところで MeCab が失敗するので放置していたのだが、今回はそういう事情なので少しがんばってみる。

1時間くらいやってみたところ、どうもリリース版である mecab-0.81 だと少なくとも Fedora Core 2 および ubuntu ではうまくいかないらしく、あまり表立って公開されていない mecab-0.82pre2 と ipadic-2.5.1.1 という組み合わせでコンパイルするとうまくいくことを発見。

Python モジュールも swig で生成されるはずなのでどのバージョンにもあるのかと思ったら 0.75 よりあとのものには含まれていないようで、0.75 を持ってきてインストールしてみたところ、(Makefile が少しおかしいとかまだいくつかはまりどころがあったけど)ようやく eric-n さんのスクリプトが動いた。

eric-n さんの話によると、やはり直接コマンドを呼び出すより数倍は速くなったらしい。めでたしめでたし。