日本語形態素解析

「入門自然言語処理」読み進めシリーズ。12章の形態素解析アルゴリズムの箇所をせっせと見よう見まねでプログラム打ちながら読み進めていました。

p.484のanalyze_simpleのところで、途中_BOS_ENTRYと_EOS_ENTRYが突然出てきます。定義されてない変数ってことでエラーでそう、と思いつつp.486の結果を出すところまでプログラムを打ち込み実行しましたが、やはり上述の理由でだめでした。しばらくあれこれ試行錯誤し、

_BOS_ENTRY = {'pos':'BOS','lemma':u'BOS','length':1}
_EOS_ENTRY = {'pos':'EOS','lemma':u'EOS','length':1}

として関数内で定義したらエラー無く本のとおりの以下の結果

BOS/彼/の/来る/間/で/待つ/EOS
BOS/彼/の/来る/まで/待つ/EOS
BOS/彼/の/車/で/待つ/EOS

が得られました。dict_entriesのところに加えて定義してもいいのかな、と思いましたが、辞書の各エントリのlist[0]、つまり表層形のところをどうしたらいいものか、という問題があったのでひとまず辞書エントリとは分けての定義が無難かなと判断しました。

それにしてもここで学んだ簡易な形態素解析ですが、簡易なものとはいえプログラムの流れを追うだけで今はいっぱいいっぱいいです。このレベルのアルゴリズムをすらすらプログラムに直せる実力がいち早く欲しいところです。