エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

指示語が指すものを判別する その2

前回記事

suzaku-tec.hatenadiary.jp

今回、書くに至ったきっかけ

よくよく考えたら、同じ文でも指示語の対象があるな~と思い、ちょっと考えなした。

詳細

例えば、以下のケース

机の上に本があり、それは、母が読んでいたものだ。

前回の実装だと、前の文から探しにいくので、何も設定されない。
だが、この場合の それ は明らかに文章内にある を指している。

解決方法

まず、同一文内で、指示語より前にある主語があれば、それを適用するようにした。
倒置法だったらどうするのって思ったけど、その場合は、指示語を使えないハズなので、考慮の対象外にした。

問題点

上記の解決方法で全部なんとかなるだろうと思ったけど、上手くいかなかった。。。
なぜかと言うと、分単位で位置を特定しているため。。。。

もう少し詳しく説明する前に、ちょっと導入説明。
形態素解析には、kuromojiを使っているのだが、その解析単位は、分単位でしている。
下記を例にする。

企業は自動車やテレビや冷蔵庫など新らしい製品が次々と発売する。それらを買うためには古い製品を捨てなければならず捨てたものの大半がゴミになる。

この場合、文は、企業は自動車やテレビや冷蔵庫など新らしい製品が次々と発売する。それらを買うためには古い製品を捨てなければならず捨てたものの大半がゴミになる。 になる。
その文単位で形態素解析をしているため、形態素解析した結果のトークン情報の位置情報が、文ごとにリセットされている。
最初から、全部一緒に形態素解析すればいいじゃんって思ったけど、そうすると、段落毎の関係性の解析、文書間の関連性の解析が難しくなるのと、長文の場合、位置情報がオーバーフローすると感じたため。
kuromojiの位置情報は、int型なので。。。
今作っている文章解析のライブラリは、長文が前提にあるので、避けたかった。

長くなったが、そういう理由があって、分単位で解析していた。

結構、これに気づくのに時間がかかったわ。

解決方法

もう、どうしようもないので、全部位置情報でなんとかするのは諦めた。

問題は分割して解決するようにした。

どうしたかというと、まず、同一文章内で指示語がないかを、位置情報で解決するようにした。
それで見つからない場合、全文の主語をあてがうようにした。

今後の問題点

ある程度、思い描いたことができるようになってきた。

ただ、まだ動作がおかしい感じがするわ。。。
喋り言葉は、ほぼNGなんだよね。。。。
きちんとした文章なら、きちんと解析できるんだけど。。。
文章の正確さによって、解析結果があてにならなくなったりするのが辛い。。。
今後は、そこら編の精度を高める必要があると感じている。
もしかしたら、アプローチ変える必要があるかも知れない。