So-net無料ブログ作成

janome のソースコードを読む(つづき) [Python]

これは「第7回 Pythonもくもく会 @アライドアーキテクツ(恵比寿)」
http://mokupy.connpass.com/event/13840/ の記録で、かつ http://nakagami.blog.so-net.ne.jp/2015-04-11 の続きです。

前回のこれ↑の直後に、python2.7 と python3.4 の両方で動くような修正の pull request を送ったのだが、今日、それが動いていないことを発見。超恥ずかしい。
言いわけをさせてもらうと python setup.py test でエラーメッセージが出ていなかったので大丈夫だと思っていた。

そのことは @moco_beta さんは(当然ながら)気づいていたようなので、お任せして、もっと真剣にソースコードを読むことにした。

前回のソースコードリーディングのあとで、 http://mocobeta.github.io/janome/ ここに紹介されている「自然言語処理の基礎」の第3章を読んだので、さっぱりわからないから、クラス名が何を意味してるか多少わかる状態からのソースコードリーディングとなった。

fst.py は、何をしているかわからないけど、まあそういうもんだから知らなくてもいいな、と理解した。そんなわけで、今日は一日かけて lattice.py と tokenizer.py の300行弱のコードを読んだ。
・・・が、ほぼ一日にらんでいたが完全に理解するまでには至らない。うーん、難しい。
結局のところ経路探索の問題で、Lattice.backward() で逆順にたどって最小コストのものだけを取得していることはわかった。
しかし、Lattice の、すべての経路をたどる方法がよくわからない。そんなことできないのかも知れないけど、できないのかどうかもよくわからない。
Lattice の内部に snodes と enodes の2つメンバーを持たなければいけない意味もわからない。
どっちかひとつにまとめることはできないんだろうか?

インデックスの始まりが 1〜になっている部分があったり、 Lattice.conn_costs のようにメンバーは宣言されているけど使ってない変数とかあって、参考にしたソースコードの影響とか、試行錯誤した名残があるのかな、と思った。

(2015-04-20追記)
snodes には node の先頭文字の位置が、 enodes には node の最後の文字が入る位置が記録してあって、どちらも必要なようだ。


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

コメント 0

コメントの受付は締め切りました

Facebook コメント

トラックバック 0