我正在尝试使用difflib.get_close_matches
获得最佳匹配的分数:
import difflib
best_match = difflib.get_close_matches(str,str_list,1)[0]
我知道添加' cutoff
'的选项参数,但无法确定如何在设置阈值后获得实际分数。
我错过了什么吗?是否有更好的解决方案来匹配unicode字符串?
答案 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