y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

MeCab の解析結果からラティスを作成する

MeCab の解析結果からラティスを作成するスクリプトを書いてみました。N-best 解を集計して Graphviz の dot ファイルを出力するものです。
github.com

以下のように実行すると、MeCab での解析結果が png 形式の画像ファイルとして出力されます。実行には MeCab, PHP のほかに Graphviz のインストールが必要です。

$ echo 'すもももももももものうち。' | ./mecab-nbest-prob.sh -N 10 | php nbest2dot.php | dot -Tpng -o lattice.png

上記の実行例では、以下の png ファイルが得られます*1。各ノードは形態素を表し、エッジは形態素間の連接を表します。各ノードの括弧内の数字は、左側が単語生起コスト、右側は最小の累積コストです。エッジに付けられた数字は連接コストです。

N-best 解のコストを表示する処理については、下記のブログ記事が大変参考になりました*2
MeCab で N-Best 解の累積コストを出力する - あらびき日記

本来 MeCab では、出力フォーマットを指定することでコストを出力できるはずなのですが、現在は実装上の問題により、誤った値を出力してしまうようです。参照先のブログ記事では、一度形態素解析を実行してから、その結果を用いた制約付き解析を行うことで、正しいコストを出力するという対処方法が示されています。

*1:dot ファイルを生成する処理をもう少し頑張れば、より整ったグラフを出力できます。今回はグラフを出力できたところで満足してしまいましたが、気が向けば改善するかもしれません。

*2:mecab-nbest-prob.sh では、この記事で述べられている方法でコストを出力しています。