Algorytm Levensteina opiera się na liczbie wstawek, usunięć i podstawień w łańcuchach.
Niestety nie bierze się pod uwagę typowego błędu pisowni, jakim jest transpozycja 2 znaków (np. Niektóre niesamowite i niektóre małe). Wolałbym więc bardziej niezawodny algorytm Damerau-Levensteina .
Nie sądzę, że dobrym pomysłem jest stosowanie odległości do całych strun, ponieważ czas gwałtownie rośnie wraz z długością porównywanych strun. Co gorsza, po usunięciu składników adresu, takich jak ZIP, zupełnie inne adresy mogą pasować lepiej (mierzone za pomocą internetowego kalkulatora 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)
Efekty te pogarszają się w przypadku krótszych nazw ulic.
Lepiej więc użyj inteligentniejszych algorytmów. Na przykład Arthur Ratz opublikował w CodeProject algorytm do inteligentnego porównywania tekstu. Algorytm nie drukuje odległości (z pewnością można go odpowiednio wzbogacić), ale identyfikuje pewne trudne rzeczy, takie jak przenoszenie bloków tekstowych (np. Zamiana między miastem a ulicą między moim pierwszym przykładem a ostatnim przykładem).
Jeśli taki algorytm jest zbyt ogólny dla twojego przypadku, powinieneś naprawdę pracować według komponentów i porównywać tylko porównywalne komponenty. Nie jest to łatwe, jeśli chcesz przeanalizować dowolny format adresu na świecie. Ale jeśli cel jest bardziej konkretny, powiedzmy w USA, z pewnością jest wykonalny. Na przykład „ulica”, „st.”, „Miejsce”, „plac” i ich zwykłe błędy ortograficzne mogą ujawnić uliczną część adresu, której wiodącą częścią byłaby w zasadzie liczba. Kod pocztowy pomógłby zlokalizować miasto lub alternatywnie jest to prawdopodobnie ostatni element adresu, a jeśli nie lubisz zgadywania, możesz poszukać listy nazw miast (np. Pobierając darmową bazę kodów pocztowych). Następnie można zastosować Damerau-Levenshtein tylko na odpowiednie składniki.