Levenshteinは、ある文字列を別の文字列に変換するために必要な編集(挿入、削除、または置換)の数をカウントします。ダメラウ・レーベンシュタインは、転置も単一の編集と見なす修正バージョンです。出力は編集の整数ですが、これは式によって類似性の値を与えるために正規化することができます
1 - (edit distance / length of the larger of the two strings)
Jaroアルゴリズムは、一般的な文字の尺度であり、転置を考慮して、距離が長い文字列の半分以下の長さです。Winklerはこのアルゴリズムを変更して、文字列の先頭付近の違いが文字列の末尾付近の違いよりも重要であるという考えをサポートしました。JaroとJaro-Winklerは、単語や名前などの小さな文字列を比較するのに適しています。
どちらを使用するかを決定することは、パフォーマンスの問題だけではありません。比較する文字列の性質に適した方法を選択することが重要です。ただし、一般的には、各文字列を他のすべての文字列と比較する必要があり、データセットに数百万の文字列があるため、前述の両方のアルゴリズムはコストがかかる可能性があります。これは、膨大な数の比較です。これは、文字列ごとに音声エンコーディングを計算し、同じエンコーディングを共有する文字列を単純にグループ化するようなものよりもはるかにコストがかかります。
これらのアルゴリズムやその他のあいまい文字列照合アルゴリズムに関する詳細情報は、インターネット上に豊富にあります。これはあなたにスタートを与えるでしょう:
個人名マッチングの比較:技術と実際の問題
その論文によると、私が言及した4つのJaroおよびLevenshteinアルゴリズムの速度は、最速から最遅までです。
- ヤロ
- ジャロウィンクラー
- レーベンシュタイン
- ダメラウ・レーベンシュタイン
最も遅いものは最も速いものの2〜3倍の時間がかかります。もちろん、これらの時間は文字列の長さと実装に依存し、使用されていない可能性のあるこれらのアルゴリズムを最適化する方法があります。