人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

2つの文章の談話レベルでの類似性を定量的に算出する方法/アルゴリズムはあるでしょうか

たとえば、レーベンシュタイン距離です。
レーベンシュタイン距離の場合は、http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2 を見る限り、自然言語のシンタクス/セマンティクスを考慮していないように思えます。
単語や文レベルでの類似性には信頼性がありそうですが、談話レベルでも有効なのでしょうか。
また、levenshtein gem のような、プログラミング言語 Ruby でのライブラリとして実装があれば、それも知りたいです。

●質問者: mori_dev
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● snow0214
●300ポイント ベストアンサー

単純なアルゴリズムですが、辞書も不要で意外と的中率の高いものとしてN-gramがあります。
http://www.shuiren.org/chuden/teach/n-gram/index-j.html

下のブログが参考になります。
http://blog.livedoor.jp/techblog/archives/64737211.html

PHPではN-gramを改良した関数としてsimilar_textが組み込まれています。日本語もUTF-8で渡してやれば、きちんと処理できます。
ちなみに、levenshteinも組み込まれています。

Rubyでの実装は下にあります。
http://freestyle.nvo.jp/archives/919

N-gramやlevenshteinは文法や単語の意味を考慮していません。単語の順序が入れ替わってもそこそこ一致するのですが、異なる単語(同義語)が使われていると、途端に精度が落ちます。

そこで、GoogleではN-gramに加えて形態素解析を使うことで精度を高めているそうです。
形態素解析で単語を切り出して、Googleの巨大な辞書で類似語かどうか検索しています。これだと、談話レベルでもそこそこ当たります。

rubyから形態素解析ライブラリmecabを利用する
http://k-shogo.github.io/article/2013/09/04/ruby-mecab/

優れた検索技術はどちらか---長年の論争がついに決着

http://itpro.nikkeibp.co.jp/members/NBY/ITARTICLE/20030131/1/


mori_devさんのコメント
基礎的なことから、質問へのご回答まで、ありがとうございました。とくにライブドアブログのリンク先のトライグラムの事例が興味深かったです。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ