我正在使用 difflib python 包。不管我是否设置isjunk
论证,计算出的比率是相同的。是不是忽略了空格的差异isjunk
is lambda x: x == " "
?
In [193]: difflib.SequenceMatcher(isjunk=lambda x: x == " ", a="a b c", b="a bc").ratio()
Out[193]: 0.8888888888888888
In [194]: difflib.SequenceMatcher(a="a b c", b="a bc").ratio()
Out[194]: 0.8888888888888888
isjunk
工作原理与您想象的略有不同。一般来说,isjunk
仅标识一个或多个不影响匹配长度但仍包含在总字符数中的字符。例如,请考虑以下情况:
>>> SequenceMatcher(lambda x: x in "abcd", " abcd", "abcd abcd").ratio()
0.7142857142857143
第二个字符串的前四个字符 ("abcd"
) 都是可以忽略的,因此可以将第二个字符串与以空格开头的第一个字符串进行比较。从第一个字符串和第二个字符串中的空格开始,然后,上面SequenceMatcher
查找 10 个匹配字符(每个字符串中有 5 个)和 4 个不匹配字符(第二个字符串中可忽略的前四个字符)。这给出的比率为 10/14 (0.7142857142857143)。
那么,在你的情况下,第一个字符串"a b c"
匹配索引 0、1 和 2 处的第二个字符串(值为"a b"
)。第一个字符串的索引 3 (" "
) 没有匹配项,但在匹配的长度方面被忽略。由于空格被忽略,索引 4 ("c"
) 匹配第二个字符串的索引 3。因此,9 个字符中有 8 个匹配,比例为0.88888888888888
.
您可能想尝试这个:
>>> c = a.replace(' ', '')
>>> d = b.replace(' ', '')
>>> difflib.SequenceMatcher(a=c, b=d).ratio()
1.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)