El algoritmo de Levenstein se basa en el número de inserciones, eliminaciones y sustituciones en cadenas.
Desafortunadamente, no tiene en cuenta un error ortográfico común, que es la transposición de 2 caracteres (por ejemplo, someawesome vs someaewsome). Entonces preferiría el algoritmo Damerau-Levenstein más robusto .
No creo que sea una buena idea aplicar la distancia en cadenas enteras porque el tiempo aumenta abruptamente con la longitud de las cadenas comparadas. Pero aún peor, cuando se eliminan componentes de dirección, como ZIP, direcciones completamente diferentes pueden coincidir mejor (medido usando la calculadora de Levenshtein en línea ):
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)
Estos efectos tienden a empeorar para nombres de calles más cortos.
Así que será mejor que uses algoritmos más inteligentes. Por ejemplo, Arthur Ratz publicó en CodeProject un algoritmo para la comparación de texto inteligente. El algoritmo no imprime una distancia (ciertamente puede enriquecerse en consecuencia), pero identifica algunas cosas difíciles como mover bloques de texto (por ejemplo, el intercambio entre la ciudad y la calle entre mi primer ejemplo y mi último ejemplo).
Si dicho algoritmo es demasiado general para su caso, entonces debería realmente trabajar por componentes y comparar solo componentes comparables. Esto no es algo fácil si desea analizar cualquier formato de dirección en el mundo. Pero si el objetivo es más específico, por ejemplo, es ciertamente factible. Por ejemplo, "street", "st.", "Place", "plazza" y sus errores ortográficos habituales podrían revelar la parte de la calle de la dirección, cuya parte principal sería, en principio, el número. El código postal ayudaría a localizar la ciudad, o alternativamente es probablemente el último elemento de la dirección, o si no le gusta adivinar, puede buscar una lista de nombres de ciudades (por ejemplo, descargar una base de datos de código postal gratuita). Luego puede aplicar Damerau-Levenshtein solo en los componentes relevantes.