Algoritma Levenstein didasarkan pada jumlah penyisipan, penghapusan, dan penggantian dalam string.
Sayangnya itu tidak memperhitungkan kesalahan ejaan yang umum yang merupakan transposisi dari 2 karakter (mis. Someawesome vs someaewsome). Jadi saya lebih suka algoritma Damerau-Levenstein yang lebih kuat .
Saya tidak berpikir itu ide yang baik untuk menerapkan jarak pada string keseluruhan karena waktu meningkat secara tiba-tiba dengan panjang string dibandingkan. Tetapi yang lebih buruk lagi, ketika komponen alamat, seperti ZIP dihapus, alamat yang sama sekali berbeda mungkin lebih cocok (diukur menggunakan kalkulator 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)
Efek ini cenderung memburuk untuk nama jalan yang lebih pendek.
Jadi sebaiknya Anda menggunakan algoritma yang lebih cerdas. Sebagai contoh, Arthur Ratz menerbitkan di CodeProject suatu algoritma untuk perbandingan teks cerdas. Algoritma tidak mencetak jarak (tentu dapat diperkaya sesuai), tetapi mengidentifikasi beberapa hal-hal sulit seperti memindahkan blok teks (misalnya swap antara kota dan jalan antara contoh pertama saya dan contoh terakhir saya).
Jika algoritma seperti itu terlalu umum untuk kasus Anda, Anda harus benar-benar bekerja dengan komponen dan hanya membandingkan komponen yang sebanding. Ini bukan hal yang mudah jika Anda ingin mem-parsing format alamat apa pun di dunia. Tetapi jika targetnya lebih spesifik, katakanlah AS, itu tentu layak. Misalnya, "jalan", "st.", "Tempat", "plazza", dan salah ejaan mereka yang biasa dapat mengungkapkan bagian jalan alamat tersebut, bagian utama yang pada prinsipnya akan menjadi nomor. Kode ZIP akan membantu untuk menemukan kota, atau alternatifnya mungkin adalah elemen terakhir dari alamat, atau jika Anda tidak suka menebak, Anda dapat mencari daftar nama kota (misalnya mengunduh basis data kode pos gratis). Anda kemudian dapat menerapkan Damerau-Levenshtein hanya pada komponen yang relevan.