Алгоритм Левенштейна основан на количестве вставок, удалений и подстановок в строках.
К сожалению, он не принимает во внимание обычную орфографическую ошибку, которая представляет собой транспонирование двух символов (например, «что-то удивительное» или «что-то удивительное»). Поэтому я бы предпочел более надежный алгоритм Дамерау-Левенштейна .
Я не думаю, что это хорошая идея, чтобы применить расстояние для целых строк, потому что время резко увеличивается с длиной сравниваемых строк. Но еще хуже, когда компоненты адреса, такие как 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 алгоритм для умного сравнения текста. Алгоритм не распечатывает расстояние (его можно соответствующим образом увеличить), но он идентифицирует некоторые сложные вещи, такие как перемещение текстовых блоков (например, перестановка между городом и улицей между моим первым примером и моим последним примером).
Если такой алгоритм является слишком общим для вашего случая, вам следует по-настоящему работать по компонентам и сравнивать только сопоставимые компоненты. Это непросто, если вы хотите разобрать любой формат адреса в мире. Но если цель более конкретна, скажем, США, это, безусловно, выполнимо. Например, «улица», «улица», «место», «площадь» и их обычные орфографические ошибки могут указывать на улицу, часть адреса, ведущей частью которой в принципе будет число. Почтовый индекс поможет найти город, или, возможно, он является последним элементом адреса, или, если вам не нравится угадывать, вы можете найти список названий городов (например, загрузить бесплатную базу данных почтовых индексов). Затем вы можете применить Damerau-Levenshtein только к соответствующим компонентам.