web-dev-qa-db-fra.com

Différence entre Jaro-Winkler et Levenshtein distance?

J'ai un cas d'utilisation où j'ai besoin de faire une correspondance approximative de millions d'enregistrements à partir de plusieurs fichiers. J'ai identifié deux algorithmes pour cela: Jaro-Winkler et Levenshtein modifier la distance.

Quand j'ai commencé à explorer les deux, je ne pouvais pas comprendre quelle était la différence exacte entre les deux. Il semble que Levenshtein donne le nombre de modifications entre deux chaînes et que Jaro-Winkler donne un score correspondant entre 0,0 et 1,0. Je n'ai pas compris l'algorithme. Comme je dois utiliser l'un ou l'autre algorithme, j'ai besoin de connaître les différences exactes en ce qui concerne les performances de l'algorithme.

69
Bhavesh Shah

Levenshtein compte le nombre de modifications (insertions, suppressions ou substitutions) nécessaires pour convertir une chaîne en une autre. Damerau-Levenshtein est une version modifiée qui considère également les transpositions comme des modifications uniques. Bien que la sortie soit le nombre entier de modifications, vous pouvez normaliser cette opération pour obtenir une valeur de similarité à l'aide de la formule

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

L'algorithme Jaro est une mesure de caractères communs, ne dépassant pas la moitié de la longueur de la chaîne la plus longue, en tenant compte des transpositions. Winkler a modifié cet algorithme pour soutenir l'idée que les différences près du début de la chaîne sont plus significatives que les différences près de la fin de la chaîne. Jaro et Jaro-Winkler conviennent à la comparaison de petites chaînes comme des mots et des noms.

Décider lequel utiliser n'est pas seulement une question de performance. Il est important de choisir une méthode adaptée à la nature des chaînes que vous comparez. En général cependant, les deux algorithmes que vous avez mentionnés peuvent être coûteux, car chaque chaîne doit être comparée à une autre chaîne. Avec des millions de chaînes dans votre jeu de données, le nombre de comparaisons est énorme. Cela coûte beaucoup plus cher que de calculer un codage phonétique pour chaque chaîne puis de simplement grouper des chaînes partageant des codages identiques.

Il existe une multitude d'informations détaillées sur ces algorithmes et d'autres algorithmes de correspondance de chaîne floue sur Internet. Celui-ci vous donnera un début:

Comparaison de la correspondance de noms de personnes: techniques et problèmes pratiques

Selon cet article, la vitesse des quatre algorithmes Jaro et Levenshtein que j'ai mentionnés va du plus rapide au plus lent:

  • Jaro
  • Jaro-Winkler
  • Levenshtein
  • Damerau-Levenshtein

le plus lent prenant 2 à 3 fois plus longtemps que le plus rapide. Bien sûr, ces temps dépendent de la longueur des chaînes et des implémentations, et il existe des moyens d'optimiser ces algorithmes qui n'ont peut-être pas été utilisés.

133
hatchet