在python difflib库中,SequenceMatcher类的行为是意外的,还是我误读了假定的行为?在
为什么isjunk的论点在这个案例中似乎没有什么不同?在
difflib.SequenceMatcher(None, "AA", "A A").ratio() return 0.8
difflib.SequenceMatcher(lambda x: x in ' ', "AA", "A A").ratio() returns 0.8
我的理解是,如果省略空格,这个比率应该是1。在
Tags:
这是因为
ratio
函数在计算比率时使用了总序列的长度,,但它没有使用isjunk
过滤元素。因此,只要匹配块中的匹配数产生相同的值(有和没有isjunk
),比率度量将是相同的。由于性能原因,我假设序列没有被
isjunk
过滤。
^{pr2}$self.a
和self.b
是传递给SequenceMatcher对象的字符串(序列)(在示例中为“AA”和“AA”)。isjunk
函数lambda x: x in ' '
仅用于确定匹配块。您的示例非常简单,因此两个调用的结果比率和匹配块是相同的。相同的匹配块,比率是:
M = 2, T = 6 => ratio = 2.0 * 2 / 6
现在考虑下面的例子:
现在匹配块是不同的,但是比率将是相同的,因为匹配的数量仍然相等:
当
isjunk
为None时:M = 2, T = 6 => ratio = 2.0 * 2 / 6
当
isjunk
是lambda x: x == ' '
:M = 1 + 1, T = 6 => ratio = 2.0 * 2 / 6
最后,不同数量的匹配:
匹配的数量不同
当
isjunk
为None时:M = 2, T = 7 => ratio = 2.0 * 2 / 7
当
isjunk
是lambda x: x == ' '
:M = 1 + 2, T = 6 => ratio = 2.0 * 3 / 7
相关问题 更多 >
编程相关推荐