Алгоритм Левенштайна заснований на кількості вставок, видалень та підстановок у рядках.
На жаль, він не враховує поширену помилку, яка полягає у перенесенні двох знаків (наприклад, деякий у порівнянні з деяким). Тому я вважаю за краще більш надійний алгоритм Дамерау-Левенштейна .
Я не думаю, що застосовувати відстань на цілі рядки не дуже добре, оскільки час різко збільшується в порівнянні з довжиною рядків. Але ще гірше, коли компоненти адреси, як-от ZIP, видаляються, зовсім інші адреси можуть відповідати кращому (вимірюється за допомогою онлайн-калькулятора Левенштайна ):
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)
Ці ефекти, як правило, погіршуються для коротшої назви вулиці.
Тож вам краще використовувати розумніші алгоритми. Наприклад, Артур Ратц опублікував на CodeProject алгоритм для розумного порівняння тексту. Алгоритм не роздруковує відстань (він, безумовно, може бути відповідним чином збагачений), але він визначає деякі складні речі, такі як переміщення текстових блоків (наприклад, заміна між містом та вулицею між моїм першим прикладом та моїм останнім прикладом).
Якщо такий алгоритм занадто загальний для вашого випадку, вам слід реально працювати за компонентами та порівнювати лише порівнянні компоненти. Це непроста річ, якщо ви хочете проаналізувати будь-який формат адреси у світі. Але якщо ціль більш конкретна, скажімо, США, це, безумовно, можливо. Наприклад, "вулиця", "вул.", "Місце", "плацза" та їхні звичайні написання можуть вказувати вуличну частину адреси, провідною частиною якої в принципі буде номер. Поштовий індекс допоможе знайти місто, або, мабуть, це останній елемент адреси, або якщо вам не подобається здогадування, ви можете шукати список назв міст (наприклад, завантажити безкоштовну базу поштових індексів). Потім ви можете застосувати Дамерау-Левенштайн лише для відповідних компонентів.