構文解析器の変更:CabochaからKNP

これまで数年、一貫して構文解析器としては、Cabochaを使ってきた。最初にこれを選んだ理由はもう思い出せない。ロボットネタの作成にか交わすところも、すべてこれでやってきた。

他にKNPという解析ツールがあることはもちろん知っていた。

この間、ここでの文章知識のprolog化をするにあたって、構文解析器が重要な役割を果たすはずなのだが、Cabochaがどうにも思い通りに結果を表示しないので、Cabochaは、フレーズを出力する手段としてのみ使っていた。

例えば、この間使っていた例文「芸人とは、なんらかの技芸や芸能の道に通じている人、または身に備わった技芸や芸能をもって職業とする人のことを指す日本特有の概念である」をこのCabochaにかけ、構造だけ出力させると次のようになる。

のびたラーメンのような結果で、構造は何も表現されていない。

フレーズを切り取るだけならば、Macabから、そう難儀せずにできそうで、あえてCabochaを使うまでもないという気持ちはあったが、そこも面倒なので、Cabochaを使っているという感じだった。

JPrologで、どう構造化するという時に、ある意味仕方なく、自前の、必要な範囲の構文解析を行なっているのだが、なんとも不満足なものであることは確かだ。

そこで、改めて、KNPを試してみた。正直、驚くほど凄かった。例えば先の芸人の定義をKNPにかけると次のようになる。(構造だけ出力させる)

ほぼ、完璧である!!

「または」という接続詞が果たしている役割や、主語の「とは」の捉え方、最後の「日本特有の概念」のところ、「や」の並列性の捉え方、全部正しい。

これほどの違いとは知らなかった。今までがなんだったのか。衝撃が大きすぎる。

JPrologのすべてを、KNPで書き直そうと思う。