私はfuzzywuzzyを試していましたが、かなりの数のケースで間違った結果が生成されていることに気付きました。デバッグしようとしましたが、説明が難しいget_matching_blocks()のシナリオに遭遇しました。
n
get_matching_blocks()についての私の理解は、インデックスの最初の文字列の長さのサブ文字 列がインデックスの2番目の文字i
列の長さのサブ文字列と正確に一致するトリプレットタプル(i、j、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)]
>>>
では、なぜ上記のコードが一致するブロックを見つけられないのでしょうか?