CPANモジュールText::Similarity

http://search.cpan.org/~jasonm/

2つのテキストファイルの類似度スコアを計算する。ソースをざっと読んでみた。
Overlaps.pmのgetSimilarity()でsanitizeString()を実行。Similarity.pmのsanitizeString()は英語前提(約物の除去、大文字小文字変換、引用符の除去など)なので、日本語を扱うにはMeCabなどで分かち書きしたテキストファイルを用意して、sanitizeString()を日本語対応に置き換えればよい。
類似度スコアの計算は、OverlapFinder.pmのgetOverlap()で処理している。
2つの入力テキストをそれぞれ単語の配列に変換し、最長一致する要素の連続を順に探す。文字列検索が文字単位で行う比較処理を単語単位に拡張した実装。
最長一致単語列の列数(単語数)とその出現頻度の積和を類似度スコアとする。2つのテキストのそれぞれの単語数をもとに、スコア値を正規化するオプションもある。

実際に試してみた。引用などで他のテキストとの重複があるとスコアが高くなる。