Jaro-WinklerとLevenshteinの距離の違いは?[閉まっている]


83

複数のファイルからの何百万ものレコードのあいまいマッチングを行う必要があるユースケースがあります。そのための2つのアルゴリズムを特定しました。Jaro-WinklerLevenshteinの編集距離です。

両方を調べ始めたとき、2つの正確な違いが何であるかを理解することができませんでした。Levenshteinは2つの文字列間の編集数を示し、Jaro-Winklerは0.0から1.0の間の正規化されたスコアを提供しているようです。アルゴリズムがわかりませんでした。

どちらかのアルゴリズムを使用する必要があるため、この2つのアルゴリズムの根本的な違いを知る必要があります。

次に、この2つのアルゴリズムのパフォーマンスの違いについて知りたいと思います。

回答:


174

Levenshteinは、ある文字列を別の文字列に変換するために必要な編集(挿入、削除、または置換)の数をカウントします。ダメラウ・レーベンシュタインは、転置も単一の編集と見なす修正バージョンです。出力は編集の整数ですが、これは式によって類似性の値を与えるために正規化することができます

1 - (edit distance / length of the larger of the two strings)

Jaroアルゴリズムは、一般的な文字の尺度であり、転置を考慮して、距離が長い文字列の半分以下の長さです。Winklerはこのアルゴリズムを変更して、文字列の先頭付近の違いが文字列の末尾付近の違いよりも重要であるという考えをサポートしました。JaroとJaro-Winklerは、単語や名前などの小さな文字列を比較するのに適しています。

どちらを使用するかを決定することは、パフォーマンスの問題だけではありません。比較する文字列の性質に適した方法を選択することが重要です。ただし、一般的には、各文字列を他のすべての文字列と比較する必要があり、データセットに数百万の文字列があるため、前述の両方のアルゴリズムはコストがかかる可能性があります。これは、膨大な数の比較です。これは、文字列ごとに音声エンコーディングを計算し、同じエンコーディングを共有する文字列を単純にグループ化するようなものよりもはるかにコストがかかります。

これらのアルゴリズムやその他のあいまい文字列照合アルゴリズムに関する詳細情報は、インターネット上に豊富にあります。これはあなたにスタートを与えるでしょう:

個人名マッチングの比較:技術と実際の問題

その論文によると、私が言及した4つのJaroおよびLevenshteinアルゴリズムの速度は、最速から最遅までです。

  • ヤロ
  • ジャロウィンクラー
  • レーベンシュタイン
  • ダメラウ・レーベンシュタイン

最も遅いものは最も速いものの2〜3倍の時間がかかります。もちろん、これらの時間は文字列の長さと実装に依存し、使用されていない可能性のあるこれらのアルゴリズムを最適化する方法があります。


6
Hatchetの答えは素晴らしいですが、Elasticsearchのようなものを使用して、ファジー(Levenshtein)クエリと音声ベースのクエリの両方を実行でき、多くの労力をかけずに迅速に評価できる可能性があります。
ppearcy 2015年

2
私も同じような考えを持っていました。単語が多いobject.descriptionフィールドを比較する必要があります。レーベンシュタインにESを使用するために、このようにすでに行われていることはありますか?
wexoni 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.