Levenshtein은 한 문자열을 다른 문자열로 변환하는 데 필요한 편집 (삽입, 삭제 또는 대체) 수를 계산합니다. Damerau-Levenshtein은 조옮김을 단일 편집으로 간주하는 수정 된 버전입니다. 출력은 정수 편집 수이지만 공식으로 유사성 값을 제공하도록 정규화 할 수 있습니다.
1 - (edit distance / length of the larger of the two strings)
Jaro 알고리즘은 조옮김을 고려하여 거리가 더 긴 문자열 길이의 절반 이하인 공통 문자 척도입니다. Winkler는 문자열 시작 부분의 차이가 문자열 끝 부분의 차이보다 더 중요하다는 생각을 지원하기 위해이 알고리즘을 수정했습니다. Jaro 및 Jaro-Winkler는 단어 및 이름과 같은 작은 문자열을 비교하는 데 적합합니다.
어떤 것을 사용할지 결정하는 것은 성능의 문제가 아닙니다. 비교하는 문자열의 특성에 적합한 방법을 선택하는 것이 중요합니다. 그러나 일반적으로 언급 한 두 알고리즘 모두 비용이 많이들 수 있습니다. 각 문자열을 다른 모든 문자열과 비교해야하고 데이터 세트에있는 수백만 개의 문자열과 비교해야하기 때문에 엄청난 수의 비교입니다. 이는 각 문자열에 대한 음성 인코딩을 계산 한 다음 동일한 인코딩을 공유하는 문자열을 그룹화하는 것과 같은 것보다 훨씬 비쌉니다.
인터넷에 이러한 알고리즘 및 기타 퍼지 문자열 일치 알고리즘에 대한 자세한 정보가 많이 있습니다. 이것은 당신에게 시작을 줄 것입니다.
개인 이름 일치 비교 : 기술 및 실제 문제
그 논문에 따르면 내가 언급 한 네 가지 Jaro 및 Levenshtein 알고리즘의 속도는 가장 빠른 것에서 가장 느린 것까지입니다.
- 자로
- Jaro-Winkler
- Levenshtein
- Damerau-Levenshtein
가장 느린 것은 가장 빠른 것보다 2 ~ 3 배 더 오래 걸립니다. 물론 이러한 시간은 문자열의 길이와 구현에 따라 다르며 사용되지 않았을 수있는 이러한 알고리즘을 최적화하는 방법이 있습니다.