▽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/