L'algoritmo di Levenstein si basa sul numero di inserimenti, eliminazioni e sostituzioni nelle stringhe.
Sfortunatamente non tiene conto di un errore ortografico comune che è la trasposizione di 2 caratteri (ad es. Qualcosa di fantastico contro qualcosa di simile). Quindi preferirei l' algoritmo Damerau-Levenstein più robusto .
Non penso sia una buona idea applicare la distanza su intere stringhe perché il tempo aumenta bruscamente con la lunghezza delle stringhe rispetto. Ma peggio ancora, quando vengono rimossi i componenti dell'indirizzo, come ZIP, indirizzi completamente diversi potrebbero corrispondere meglio (misurati usando il 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 un nome di strada più breve.
Quindi è meglio usare algoritmi più intelligenti. Ad esempio, Arthur Ratz ha pubblicato su CodeProject un algoritmo per il confronto intelligente dei testi. 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 tale algoritmo è troppo generale per il tuo caso, dovresti davvero lavorare per 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, diciamo gli Stati Uniti, è certamente fattibile. Ad esempio, "street", "st.", "Place", "plazza" e i loro soliti errori di ortografia potrebbero rivelare la parte della strada dell'indirizzo, la cui parte principale sarebbe in linea di principio il numero. Il codice postale aiuterebbe 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, scaricare un database di codici postali gratuito). È quindi possibile applicare Damerau-Levenshtein solo sui componenti pertinenti.