SSブログ

janomecabdic ができるまで [Python]

これは、昨日開催された (第104回)Python mini Hack-a-thon https://pyhack.connpass.com/event/147489/ で発表した janomecabdic の記録です。

janomecabdic という janome から MeCab 辞書を使って形態素解析をするアドオンパッケージを、昨日 PyPI にアップロードしました。

https://pypi.org/project/janomecabdic/
https://github.com/nakagami/janomecabdic

MeCab が辞書検索に Double Array というアルゴリズムを使っていることは以前から知っていましたが、先月くらいになって、 MeCab の Double Array で検索(と辞書の登録)する部分が、切り出されてテンプレートライブラリー化されていることを知りました。
http://chasen.org/~taku/software/darts/
「サンプルプログラムが動かねーなー」
と思っていたら、動かしている人を発見、
http://sucrose.hatenablog.com/entry/2012/09/28/121408
自分でも、短いサンプルを書いて、動作することを確認できました。
https://gist.github.com/nakagami/3ca60a82337ed66590d7e70a52efe352

janome では、同様の辞書検索を FST というアルゴリズムを使っていますが、
https://github.com/mocobeta/janome/blob/master/janome/dic.py
この↑へんの処理と同じことをする処理に差し替えれば、動きそうだぞ、ということもわかってきました。

・・・そうは言っても、 template ライブラリを読み解いて、コンパイル済みの辞書のバイナリフォーマットを理解して検索する処理を書かなくてはいけないのか?と思ったんですが、Cython でdarts のテンプレートライブラリを呼べることや、 C++ で、自分で定義した構造体、std::vector や std:pair を返す関数を書くと Cython がいい具合にマーシャリングしてPython に結果を返してくれることがわかりました。
Cython 凄い。

そんなわけで、最初に強いモチベーションがあったわけでなく、順番に調べていくうちに janomecabdic が完成しました。

コメント(0) 
共通テーマ:日記・雑感