나는 fuzzywuzzy으로 실험 중이 었으며 많은 경우에 잘못된 결과가 발생했습니다. 디버깅을 시도하고 설명하기 어려운 get_matching_blocks()를 사용하여 시나리오를 만났습니다.difflib.SequenceMatcher의 예상치 못한 동작 get_matching_blocks()
get_matching_blocks()는 삼중 튜플을 반환해야한다 내 이해 (I, J, N) 인덱스 i
에서 제 문자열 길이 n
의 서브 문자열 길이의 서브 스트링과 정확하게 일치해야 n
은 색인 j의 두 번째 문자열에 있습니다.
>>> hay = """"Find longest matching block in a[alo:ahi] and b[blo:bhi]. If isjunk was omitted or None, find_longest_match() returns (i, j, k) such that a[i:i+k] is equal to b[j:j+k], where alo <= i <= i+k <= ahi and blo <= j <= j+k <= bhi. For all (i', j', k') meeting those conditions, the additional conditions k >= k', i <= i', and if i == i', j <= j' are also met. In other words, of all maximal matching blocks, return one that starts earliest in a, and of all those maximal matching blocks that start earliest in a, return the one that starts earliest in b."""
>>> needle = "meeting those conditions"
>>> needle in hay
True
>>> sm = difflib.SequenceMatcher(None,needle,hay)
>>> sm.get_matching_blocks()
[Match(a=5, b=8, size=2), Match(a=24, b=550, size=0)]
>>>
그런데 왜 위 코드가 일치하는 블록을 찾지 못합니까?
감사합니다. 나는 그 질문을 갱신했다.그리고 반환 된 목록의 마지막 요소가 더미라는 사실을 알고 있습니다. – Abhijit
대단히 좋습니다. 인터프리터에서 실행하면 좋습니다. 동일한 결과가 나타납니다. 그러나 스위칭 매개 변수가 올바른 출력을 생산, 어쩌면 이것은 대답을 향해 누군가를 가리킬 것입니다 – wasyl
좋아, 또 다른 업데이 트가 :이'autojunk' 매개 변수와 관련이있다. 'SequenceMatcher'의 네 번째 인수로'False'를 추가하면 출력이 정확합니다. – wasyl