L'algoritmo di Levenstein è basato sul numero di inserimenti, cancellazioni e sostituzioni nelle stringhe.
Purtroppo non tiene conto di un errore ortografico comune che è la trasposizione di 2 caratteri (ad esempio someawesome vs someaewsome). Quindi preferirei l'algoritmo Damerau-Levenstein più robusto .
Non penso che sia una buona idea applicare la distanza su intere stringhe perché il tempo aumenta bruscamente con la lunghezza delle stringhe confrontate. Ma ancora peggio, quando i componenti dell'indirizzo, come ZIP, vengono rimossi, indirizzi completamente diversi possono corrispondere meglio (misurati usando calcolatore Levenshtein online ):
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)
Questi effetti tendono a peggiorare per il nome della via più breve.
Quindi è meglio usare algoritmi più intelligenti. Ad esempio, Arthur Ratz ha pubblicato su CodeProject un algoritmo per il confronto tra testo intelligente . L'algoritmo non stampa una distanza (può certamente essere arricchito di conseguenza), ma identifica alcune cose difficili come lo spostamento di blocchi di testo (ad esempio lo scambio tra città e strada tra il mio primo esempio e il mio ultimo esempio).
Se un algoritmo di questo tipo è troppo generico per il tuo caso, dovresti davvero lavorare con i componenti e confrontare solo componenti comparabili. Questa non è una cosa facile se vuoi analizzare qualsiasi formato di indirizzo nel mondo. Ma se l'obiettivo è più specifico, dicono gli Stati Uniti, è certamente fattibile. Ad esempio, "street", "st.", "Place", "plazza" e le loro usuali errori ortografici potrebbero rivelare la parte di strada dell'indirizzo, la cui parte principale sarebbe in linea di massima il numero. Il codice postale potrebbe aiutare a localizzare la città, o in alternativa è probabilmente l'ultimo elemento dell'indirizzo, o se non ti piace indovinare, potresti cercare un elenco di nomi di città (ad esempio il download di un database di codice postale gratuito). È quindi possibile applicare Damerau-Levenshtein solo sui componenti rilevanti.