静かなる名辞

pythonとプログラミングのこと


日本語モダリティ解析器 Zundaを試す

 日本語のモダリティを解析できるらしい。「文中のイベント(動詞や形容詞など)に対して、その真偽判断(イベントが起こったかどうか)、仮想性(仮定の話かどうか)などを解析します」とのこと。

 公式ページはたぶんここ。

jmizuno.github.io

環境

 ubuntu14.04

インストール

 CaboCha (>=0.60)と、Boost Library (>=1.41)を予め入れおく必要がある。CaboChaは入ってたけどBoost Libraryはなかったので、apt-getで入れた。

$ sudo apt-get install libboost-all-dev

 後はtarballを落としてきてmakeで入れろと公式に書いてある。どんなエラーが出てくるかとびくびくしながらやったけど、まったく問題なく入った。

$ ./configure
$ make
$ sudo make install

試してみる

 こうやって使うらしい。

$ echo -e "次郎は大阪に行った。\n太郎は東京には行かず地元に残ろうとした" | zunda
#EVENT0	4	wr:筆者	非未来	0	叙述	成立	0	0
* 0 2D 0/1 -2.249829
次郎	名詞,固有名詞,人名,名,*,*,次郎,ジロウ,ジロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
* 1 2D 0/1 -2.249829
大阪	名詞,固有名詞,地域,一般,*,*,大阪,オオサカ,オーサカ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
* 2 -1D 0/1 0.000000
行っ	動詞,自立,*,*,五段・カ行促音便,連用タ接続,行く,イッ,イッ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

#EVENT0	5	wr:筆者	未来	0	叙述	不成立	0	0
#EVENT1	9	wr:筆者	未来	0	意志	高確率	ポジティブ	0
#EVENT2	12	wr:筆者	非未来	0	叙述	成立	0	0
* 0 4D 0/1 -1.650377
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
* 1 2D 0/2 0.320510
東京	名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
* 2 4D 0/1 -1.650377
行か	動詞,自立,*,*,五段・カ行促音便,未然形,行く,イカ,イカ
ず	助動詞,*,*,*,特殊・ヌ,連用ニ接続,ぬ,ズ,ズ
* 3 4D 0/1 -1.650377
地元	名詞,一般,*,*,*,*,地元,ジモト,ジモト
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
* 4 -1D 3/4 0.000000
残ろ	動詞,自立,*,*,五段・ラ行,未然ウ接続,残る,ノコロ,ノコロ
う	助動詞,*,*,*,不変化型,基本形,う,ウ,ウ
と	助詞,格助詞,引用,*,*,*,と,ト,ト
し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
EOS

 公式ページには改行すれば別の文として扱われると書いてあるが、echoに-eオプションを渡さないと改行文字は改行として出力されないので注意。

 それはそうと、この結果の見方だが、

#EVENT0	4	wr:筆者	非未来	0	叙述	成立	0	0」

 という結果は4番目の形態素がどんなモダリティなのかを表す。つまり「行っ 動詞,自立,*,*,五段・カ行促音便,連用タ接続,行く,イッ,イッ」に対応する。単純だけどわかりやすいかどうかは微妙かもしれない。

色々なことを試す

 とりあえず、もうちょっと色々な文を入れてみる。

$ echo "遊びに行きたいな" | zunda
#EVENT0	2	wr:筆者	未来	0	欲求	0	ポジティブ	0
* 0 1D 0/1 0.000000
遊び	名詞,一般,*,*,*,*,遊び,アソビ,アソビ
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
* 1 -1D 0/2 0.000000
行き	動詞,自立,*,*,五段・カ行促音便,連用形,行く,イキ,イキ
たい	助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
な	助詞,終助詞,*,*,*,*,な,ナ,ナ
EOS

 なるほど。

$ echo -e "吾輩は猫である。\n名前はまだない。" | zunda
* 0 1D 0/1 0.000000
吾輩	名詞,代名詞,一般,*,*,*,吾輩,ワガハイ,ワガハイ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
* 1 -1D 0/2 0.000000
猫	名詞,一般,*,*,*,*,猫,ネコ,ネコ
で	助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある	助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
。	記号,句点,*,*,*,*,。,。,。
EOS

#EVENT0	3	wr:筆者	非未来	0	叙述	成立	0	0
* 0 2D 0/1 -2.377508
名前	名詞,一般,*,*,*,*,名前,ナマエ,ナマエ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
* 1 2D 0/0 -2.377508
まだ	副詞,助詞類接続,*,*,*,*,まだ,マダ,マダ
* 2 -1D 0/0 0.000000
ない	形容詞,自立,*,*,形容詞・アウオ段,基本形,ない,ナイ,ナイ
。	記号,句点,*,*,*,*,。,。,。
EOS

 ふーん。

 まあ、勝手はなんとなくわかった。それはそうと、zundaにはpythonバインディングなんて親切なものはないらしい。zundaオリジナルなのは#から始まる行だけで、その下はcabochaの-f 1フォーマットがそのまま出てるだけなので、プログラミングで使う側としてはテキスト処理でゴリ押して使うことになるだろう。

 その際は、コマンドラインオプションで何百kbも受け渡しするのは流石にアレなので、まとめてファイルを処理させるか、立ち上げておいて標準入出力でやりとりするかのどちらかになる。