Levenstein의 알고리즘 은 문자열의 삽입, 삭제 및 대체 수를 기반으로합니다.
불행히도 2 개의 문자 (예 : somesome 대 vsaewsome)를 바꾼 일반적인 철자법을 고려하지 않습니다. 따라서보다 강력한 Damerau-Levenstein 알고리즘을 선호합니다 .
문자열의 길이와 비교하여 시간이 갑자기 증가하기 때문에 전체 문자열에 거리를 적용하는 것이 좋지 않다고 생각합니다. 그러나 ZIP과 같은 주소 구성 요소가 제거되면 완전히 다른 주소가 더 잘 일치 할 수 있습니다 ( 온라인 Levenshtein 계산기를 사용하여 측정 ).
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)
이 효과는 거리 이름이 짧을수록 악화되는 경향이 있습니다.
따라서 더 똑똑한 알고리즘을 사용하는 것이 좋습니다. 예를 들어 Arthur Ratz는 CodeProject 에 스마트 텍스트 비교 알고리즘을 게시했습니다 . 이 알고리즘은 거리를 출력하지 않지만 (따라서 풍부하게 할 수는 있지만) 텍스트 블록 이동과 같은 어려운 것들을 식별합니다 (예 : 첫 번째 예제와 마지막 예제 사이의 도시와 거리 사이의 스왑).
그러한 알고리즘이 귀하의 경우에 너무 일반적인 경우 실제로 구성 요소별로 작업하고 비교 가능한 구성 요소 만 비교해야합니다. 세계의 주소 형식을 구문 분석하려는 경우 쉽지 않습니다. 그러나 목표가 좀 더 구체적이라면, 미국은 분명히 실현 가능하다. 예를 들어 "street", "st.", "place", "plazza"및 일반적인 철자가 틀린 주소는 주소의 거리 부분을 나타낼 수 있으며, 그 주요 부분은 원칙적으로 숫자입니다. 우편 번호는 도시를 찾는 데 도움이되거나 주소의 마지막 요소 일 수 있습니다. 또는 추측이 마음에 들지 않으면 도시 이름 목록을 찾을 수 있습니다 (예 : 무료 우편 번호 데이터베이스 다운로드). 그런 다음 Damerau-Levenshtein을 관련 부품에만 적용 할 수 있습니다.