Jaro-Winkler와 Levenshtein 거리의 차이점은 무엇입니까?
여러 파일에서 수백만 개의 레코드를 퍼지 매칭해야하는 사용 사례가 있습니다. 이를 위해 JARO - 윈 클러 와 Levenshtein 편집 거리 라는 두 가지 알고리즘을 식별했습니다 .
둘 다 탐구하기 시작했을 때 둘의 많은 것을 발견 할 수 없었습니다. Levenshtein은 두 페이지 사이의 편집 횟수를 제공하고 Jaro-Winkler는 0.0에서 1.0 사이의 일치 점수를 제공합니다. 알고리즘을 이해하지. 두 알고리즘 중 하나를 사용하는 알고리즘 성능과 관련하여 정확한 차이점을 알아야합니다.
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 배 더 오래 것입니다. 물론 그렇습니다.
'ProgramingTip' 카테고리의 다른 글
WebView는 온라인 일 때 웹 사이트를로드하고 오프라인 일 때 로컬 파일을로드합니다. (0) | 2020.11.04 |
---|---|
Swift에서 typedef를 어떻게 뻗으십니까? (0) | 2020.11.04 |
SD 카드의 파일을 이메일에 첨부합니다. (0) | 2020.11.04 |
요소에 어떤가있는 목록에서 k 개의 임의의 요소를 선택합니다. (0) | 2020.11.04 |
Java에서 대문자와 소문자로 변환 (0) | 2020.11.04 |