O algoritmo de Levenstein é baseado no número de inserções, exclusões e substituições em seqüências de caracteres.
Infelizmente, ele não leva em consideração um erro de ortografia comum, que é a transposição de 2 caracteres (por exemplo, algo impressionante versus algo bom). Então, eu prefiro o algoritmo Damerau-Levenstein mais robusto .
Não acho que seja uma boa ideia aplicar a distância em cadeias inteiras porque o tempo aumenta abruptamente com o comprimento das cadeias comparadas. Pior ainda, quando componentes de endereço, como o ZIP, são removidos, endereços completamente diferentes podem corresponder melhor (medido usando a calculadora online da Levenshtein ):
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)
Esses efeitos tendem a piorar para um nome de rua mais curto.
Então é melhor você usar algoritmos mais inteligentes. Por exemplo, Arthur Ratz publicou no CodeProject um algoritmo para comparação inteligente de texto. O algoritmo não imprime uma distância (certamente pode ser enriquecido de acordo), mas identifica algumas coisas difíceis, como a movimentação de blocos de texto (por exemplo, a troca entre cidade e rua entre meu primeiro exemplo e meu último exemplo).
Se esse algoritmo for geral demais para o seu caso, você deverá realmente trabalhar com componentes e comparar apenas componentes comparáveis. Isso não é fácil se você deseja analisar qualquer formato de endereço no mundo. Mas se o objetivo é mais específico, por exemplo, nos EUA, é certamente viável. Por exemplo, "street", "st.", "Place", "plazza" e seus erros ortográficos comuns podem revelar a parte da rua do endereço, cuja parte principal seria, em princípio, o número. O CEP ajudaria a localizar a cidade ou, alternativamente, é provavelmente o último elemento do endereço ou, se você não gosta de adivinhar, pode procurar uma lista de nomes de cidades (por exemplo, baixar um banco de dados de códigos postais grátis). Em seguida, você pode aplicar o Damerau-Levenshtein apenas aos componentes relevantes.