difflib.get_close_matches GET SCORE

时间:2016-03-29 11:47:35

标签: python-2.7 text text-analysis

我正在尝试使用difflib.get_close_matches获得最佳匹配的分数:

import difflib

best_match = difflib.get_close_matches(str,str_list,1)[0]

我知道添加' cutoff'的选项参数,但无法确定如何在设置阈值后获得实际分数。 我错过了什么吗?是否有更好的解决方案来匹配unicode字符串?

1 个答案:

答案 0 :(得分:4)

我发现difflib.get_close_matches是匹配/模糊匹配字符串的最简单方法。但是还有一些其他更高级的库,比如你在评论中提到的fuzzywuzzy。

但是如果你想使用difflib,可以使用difflib.SequenceMatcher获得如下分数:

import difflib
my_str = 'apple'
str_list = ['ape' , 'fjsdf', 'aerewtg', 'dgyow', 'paepd']
best_match = difflib.get_close_matches(my_str,str_list,1)[0]
score = difflib.SequenceMatcher(None, my_str, best_match).ratio()

在这个例子中,'apple'和列表之间的最佳匹配是'ape',得分是0.75。

您还可以遍历列表并计算要检查的所有分数:

for word in str_list:
    print "score for: " + my_str + " vs. " + word + " = " + str(difflib.SequenceMatcher(None, my_str, word).ratio())

对于此示例,您将获得以下内容:

score for: apple vs. ape = 0.75
score for: apple vs. fjsdf = 0.0
score for: apple vs. aerewtg = 0.333333333333
score for: apple vs. dgyow = 0.0
score for: apple vs. paepd = 0.4

可以在此处找到difflib的文档:https://docs.python.org/2/library/difflib.html