Levenstein'ın algoritması , dizelerdeki ekleme, silme ve değiştirme sayısına dayanmaktadır.
Ne yazık ki, 2 karakterin aktarılması olan ortak bir yazım hatası hesaba katılmaz (örn. Başkalarına karşı çok kötü). Bu yüzden daha sağlam Damerau-Levenstein algoritmasını tercih ederim .
Uzaklığı tüm dizgelere uygulamanın iyi bir fikir olduğunu sanmıyorum çünkü zaman, dizgilerin uzunluğuyla aniden artmaktadır. Ancak, daha da kötüsü, ZIP gibi adres bileşenleri kaldırıldığında, tamamen farklı adresler daha iyi eşleşebilir ( çevrimiçi Levenshtein hesaplayıcısı kullanılarak ölçülür ):
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)
Bu etkiler daha kısa cadde adı için kötüleşme eğilimindedir.
Yani daha akıllı algoritmalar kullansanız iyi edersiniz. Örneğin, Arthur Ratz, CodeProject'de akıllı metin karşılaştırması için bir algoritma yayınladı . Algoritma bir mesafeyi basmaz (buna göre kesinlikle zenginleştirilebilir), ancak metin bloklarının taşınması gibi zor şeyleri tanımlar (örneğin, ilk örneğim ile son örneğim arasında şehir ve sokak arasındaki takas).
Böyle bir algoritma sizin durumunuz için çok genelse, o zaman gerçekten bileşenlerle çalışmalı ve sadece karşılaştırılabilir bileşenleri karşılaştırmalısınız. Dünyadaki herhangi bir adres biçimini ayrıştırmak istiyorsanız bu kolay bir şey değildir. Fakat eğer hedef daha spesifikse, ABD'yi söyleyin, kesinlikle uygulanabilir. Örneğin, "sokak", "st.", "Yer", "plazza" ve genel yazım hataları, adresin cadde bölümünü ortaya çıkarabilir; bunun başında, önceliği ilke sayı olacaktır. ZIP kodu, şehri bulmak için yardımcı olabilir veya alternatif olarak muhtemelen adresin son elemanıdır veya tahmin etmekten hoşlanmıyorsanız, şehir adlarının bir listesini arayabilirsiniz (örneğin, ücretsiz bir posta kodu veritabanı indirme). Daha sonra Damerau-Levenshtein'i yalnızca ilgili bileşenlere uygulayabilirsiniz.