2016-09-20 5 views
1

저는 파이썬으로 퍼지 어지러운 작업을하고 있는데, 그것이 levenshtein 거리에서 작동한다고 주장하는 동안 한 문자가 다른 많은 문자열이 다른 결과를 산출합니다. 예를 들어.Python의 퍼지 어가 예측할 수없는 결과를 반환합니다

>>>fuzz.ratio("vendedor","vendedora") 
94 
>>>fuzz.ratio("estagiário","estagiária") 
90 
>>> fuzz.ratio("abcdefghijlmnopqrst","abcdefghijlmnopqrsty") 
97 
>>>fuzz.ratio("abc","abcd") 
86 
>>>fuzz.ratio("a","ab") 
67 

나는 모든 예제에서 하나의 문자 거리가있는 한 levenshtein 거리가 동일해야합니다 생각,하지만 난이, 그것은 어떤 종류의 "평등 비율"어떤 종류의 간단한 거리하지 않습니다 이해합니다.

나는 그것이 어떻게 작동 하는지를 이해하려고 노력했지만 나는 이해할 수없는 것처럼 보였다. 내 매우 긴 문자열은 97과 매우 짧은 67을 제공합니다. 문자열이 클수록 단일 문자에 미치는 영향이 적음을 의미합니다. 그러나 "vendedor", "vendora"및 "estagiário", "estagiária"예를 들면, 후자가 이전보다 큽니다.

어떻게 작동합니까?

현재 사용자 입력 작업 제목이 일치하고 잘못 입력 된 이름을 올바른 형식의 이름 등으로 연결하려고 할 때 더 나은 패키지가 있습니까?

+2

'fuzz.ratio'는 levenshtein 거리를 기준으로 문자열이 얼마나 비슷한지를 백분율로 반환합니다. –

답변

3

퍼지 워지가 일반적으로 어떻게 작동하는지는 정확합니다. fuzz.ratio 함수에서 더 큰 출력 숫자는 문자열이 서로 가깝다는 것을 의미합니다 (100은 완벽한 일치). 필자는 몇 가지 추가 테스트 케이스를 작성하여 작동 방법을 확인했습니다. 여기에 그들이있다 :이 시험에서

fuzz.ratio("abc", "abce") #to show which extra letter doesn't matter. 
86 
fuzz.ratio("abcd", "abce") #to show that replacing a number is worse than adding. 
75 
fuzz.ratio("abc", "abc") #to find what a match gives. 
100 

, 우리는 숫자를 교체하는 편지를 추가하는 것보다 비율 계산에 큰 영향을 (estagiário/estagiária가 vendedor/vendedora보다 경기 적었다 이유는 것을 볼 수 있습니다 , 더 길지 만). this에 따르면이 패키지는 가능한 일치 목록에서 최상의 선택을 자동 선택하기 위해 사용될 수 있으므로 의도 한 목적에 맞는 좋은 선택이라고 생각합니다.

관련 문제