KuromojiのCLIコマンドにJSON出力とラティス出力を追加

Posted by johtani on Monday, April 6, 2020

目次

Kuromoji-CLIの使い方などについては過去のブログを御覧ください。

Issueだけ上げていたJSON出力対応をしました。 また、ラティス(後述)の出力対応もしました。

JSON出力

LinderaがJSON出力に対応してるのでそれを真似しました。 -o jsonで指定していただくと、次のようなJSONが出力されます。

% echo "春眠暁を覚えず" | build/graal/kuromoji -o json
[
  {
    "text": "春眠",
    "detail": [
      "名詞",
      "一般",
      "*",
      "*",
      "*",
      "*",
      "春眠",
      "シュンミン",
      "シュンミン"
    ]
  },
  {
    "text": "暁",
    "detail": [
      "名詞",
      "一般",
      "*",
      "*",
      "*",
      "*",
      "暁",
      "アカツキ",
      "アカツキ"
    ]
  },
  {
    "text": "を",
    "detail": [
      "助詞",
      "格助詞",
      "一般",
      "*",
      "*",
      "*",
      "を",
      "ヲ",
      "ヲ"
    ]
  },
  {
    "text": "覚え",
    "detail": [
      "動詞",
      "自立",
      "*",
      "*",
      "一段",
      "未然形",
      "覚える",
      "オボエ",
      "オボエ"
    ]
  },
  {
    "text": "ず",
    "detail": [
      "助動詞",
      "*",
      "*",
      "*",
      "特殊・ヌ",
      "連用ニ接続",
      "ぬ",
      "ズ",
      "ズ"
    ]
  }
]

Viterbiラティス出力

Kuromojiが内部でトークンをどのように切り出すかを計算するためのViterbiのラティスです。これをGraphvizというツールのDOTフォーマットのファイルとして出力できるメソッドがデバッグ用ですが、Kuromojiに用意されています。 こちらを呼び出して出力するオプション-v(もしくは--viterbi)を追加しました。 注意点として、このオプションを指定すると、DOTファイルが標準出力に出力され、トークンの結果は標準エラーに出力されます。

echo "春眠暁を覚えず" | build/graal/kuromoji -v > viterbi.dot

.dotファイル自体は画像ではないので、Graphvizのdotコマンドにて画像ファイルに変換する必要があります。

dot -Tpng viterbi.dot -oviterbi.png

これで、PNGファイルが出来上がります。出来上がったファイルはこんな感じです。

画像を見ていただくと、緑色のパスがあるのがわかります。 こちらが、Kuromojiが実際に採用した形態素のリストです。それ以外のパスは不採用だったパスとなります。

ちなみに、macOSで1行で画像表示まで行うにはこんな感じで実行します。 openコマンドでpreviewアプリを指定することで画像が表示できます。 Windowsは。。。わかりません、すみません。

% echo "春眠暁を覚えず" | build/graal/kuromoji -v -o json | dot -Tpng | open -f -a preview.app

まとめ

これ以前に複数辞書対応などもしていました。 今回は2つの出力形式を追加してみました。 特にViterbiラティス出力については、内部的にどのようなコスト計算で最終的な結果が出てきているかという理解に役立ちます。想定していない切れ方の場合は、そもそも想定している形態素になっていないか、コスト計算で不採用だったかなどを確認できますので、使ってみると面白いかもです。


comments powered by Disqus