L'algorithme de Levenstein est basé sur le nombre d'insertions, de suppressions et de substitutions dans les chaînes.
Malheureusement, il ne prend pas en compte une faute d'orthographe courante qui est la transposition de 2 caractères (par exemple someawesome vs someaewsome). Je préfère donc l' algorithme Damerau-Levenstein plus robuste .
Je ne pense pas que ce soit une bonne idée d'appliquer la distance sur des cordes entières car le temps augmente brusquement avec la longueur des cordes comparées. Mais pire encore, lorsque des composants d'adresse, tels que ZIP, sont supprimés, des adresses complètement différentes peuvent mieux correspondre (mesurées à l'aide de la calculatrice Levenshtein en ligne ):
1 someawesome street, anytown, F100 211 (reference)
1 someawesome st.,anytown (difference of 15, same address)
1 otherplaces street,anytown,F100211 (difference of 13, different ddress)
1 sameawesome street, othertown, CA98200 (difference of 13, different ddress)
anytown, 1 someawesome street (28 different same address)
anytown, F100 211, 1 someawesome street (37 different same address)
Ces effets ont tendance à s'aggraver pour un nom de rue plus court.
Il vaut donc mieux utiliser des algorithmes plus intelligents. Par exemple, Arthur Ratz a publié sur CodeProject un algorithme de comparaison de texte intelligente. L'algorithme n'imprime pas une distance (il peut certainement être enrichi en conséquence), mais il identifie certaines choses difficiles telles que le déplacement de blocs de texte (par exemple, l'échange entre la ville et la rue entre mon premier exemple et mon dernier exemple).
Si un tel algorithme est trop général pour votre cas, vous devez alors vraiment travailler par composants et comparer uniquement des composants comparables. Ce n'est pas une chose facile si vous voulez analyser n'importe quel format d'adresse dans le monde. Mais si l'objectif est plus précis, par exemple aux États-Unis, il est certainement réalisable. Par exemple, "rue", "rue", "lieu", "place", et leurs fautes d'orthographe habituelles pourraient révéler la partie rue de l'adresse, dont la partie principale serait en principe le numéro. Le code postal pourrait aider à localiser la ville, ou bien il s'agit probablement du dernier élément de l'adresse, ou si vous n'aimez pas deviner, vous pouvez rechercher une liste de noms de villes (par exemple, télécharger une base de données gratuite de codes postaux). Vous pouvez ensuite appliquer Damerau-Levenshtein sur les composants concernés uniquement.