距離を編集するための最も簡単で効果的な最新の代替手段の 1 つは、Normalized Compression Distance (NCD) と呼ばれます。基本的な考え方は簡単に説明できます。zlibなど、言語に実装されている一般的なコンプレッサーを選択します。次に、文字列Aと文字列Bが与えられた場合、C(A)をAの圧縮サイズ、C(B)をBの圧縮サイズとします。ABは " AとBの連結" を意味するので、C(AB)は" " AとBの連結" の圧縮サイズを意味します。次に、分数を計算します。
( C(AB) - 最小( C(A) , C(B) )) / 最大( C(A) , C(B) )
この値は NCD( A , B) 編集距離と同様の類似性を測定しますが、選択したデータ コンプレッサに応じて、より多くの形式の類似性をサポートします。確かに、zlib は、あなたが説明している「チャンク」スタイルの類似性をサポートしています。2 つの文字列が類似している場合、連結の圧縮サイズはそれぞれの単独のサイズに近いため、分子は 0 に近く、結果は 0 に近くなります。2 つの文字列が非常に似ていない場合、圧縮後のサイズはおおよそ圧縮されたサイズが追加されるため、結果はほぼ 1 になります。zlib などのデータ圧縮プログラムに既にアクセスしている場合、この式は、編集距離や他のほとんどの明示的な文字列類似度測定よりも実装がはるかに簡単です。それは、ほとんどが「難しい」からです。ヒューリスティックや最適化などの作業はデータ圧縮部分で既に行われており、この式は、言語にとらわれない一般的な情報理論を使用して、見つかった類似のパターンの量を単純に抽出します。さらに、この手法は、記述した数百バイトのサイズ範囲では、ほとんどの明示的な類似度 (編集距離など) よりもはるかに高速です。これとサンプル実装の詳細については、Normalized Compression Distance (NCD) を検索するか、次の論文と github プロジェクトをご覧ください。
http://arxiv.org/abs/cs/0312044「圧縮によるクラスタリング」
https://github.com/rudi-cilibrasi/libcomplearn C 言語の実装
過去 10 年間に、この主題に関する他の多くの実装と論文があり、他の言語でも変更を加えて使用することができます。