在python中difflib.get_close_matches示例中使用cutoff参数是什么?

时间:2015-01-30 09:19:32

标签: python difflib

difflib.get_close_matches(word, possibilities[, n][, cutoff])中,我在这里使用了cutoff。它如何影响单词匹配?

2 个答案:

答案 0 :(得分:0)

From the documentation

  

可选参数cutoff(默认0.6)是float范围内的[0, 1]。不会得到至少与单词类似的得分的可能性将被忽略。

尝试文档中的示例:

In [11]: import difflib

In [12]: difflib.get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
Out[12]: ['apple', 'ape']

In [13]: difflib.get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'], cutoff=0.1)
Out[13]: ['apple', 'ape', 'puppy']

In [14]: difflib.get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'], cutoff=0.9)
Out[14]: []

有关该算法的详细信息,请参阅文章"Pattern Matching: The Gestalt Approach"

答案 1 :(得分:0)

我遇到了同样的问题,我发现" difflib.get_close_matches"作为基础,使用被称为“格式塔模式匹配”的方法。由Ratcliff和Obershelp描述(链接如下)。

方法" difflib.get_close_matches"它基于类" SequenceMatcher",它在源代码中指定:" SequenceMatcher是一个灵活的类,用于比较任何类型的序列对,只要序列元素是可清除的。基本算法比1980年代后期由Ratcliff和Obershelp以双曲线名称"格式塔模式匹配"发布的算法更早,并且更加迷人。基本思想是找到最长的连续匹配子序列,其中不包含" junk"元素(R-O不解决垃圾问题)。然后,相同的想法被递归地应用于匹配子序列的左侧和右侧的序列片段。这不会产生最小的编辑序列,但确实会产生与#34;看起来正确的匹配#34;对人们而言。"

关于"截止"。如果" 1"这会告诉您如何找到匹配的距离。然后它需要是完全相同的单词,随着它的下降,它会更放松。例如,如果你选择" 0"它肯定会让你回归最多"类似的"工作无论你没有任何类似的工作,所以这对大多数情况都没有多大意义。然后" 0.6"默认情况下,因为这可以产生重大结果,但它取决于任何特定的解决方案,您需要根据您的词汇和特定场景测试它适用于您的工作。

模式匹配:GESTALT方法 http://collaboration.cmc.ec.gc.ca/science/rpn/biblio/ddj/Website/articles/DDJ/1988/8807/8807c/8807c.htm

希望这有助于您理解" difflib.get_close_matches"更好。