difflib.get_close_matches获取分数

Gil*_*Gil 3 text text-analysis python-2.7

我正在尝试使用以下方法获得最佳比赛的分数difflib.get_close_matches

import difflib

best_match = difflib.get_close_matches(str,str_list,1)[0]
Run Code Online (Sandbox Code Playgroud)

我知道添加' cutoff'参数的选项,但是在设置阈值后找不到如何获得实际分数。我想念什么吗?有没有更好的解决方案来匹配unicode字符串?

小智 6

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

但是,如果要使用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()
Run Code Online (Sandbox Code Playgroud)

在此示例中,“苹果”和列表之间的最佳匹配是“猿”,得分为0.75。

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

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

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

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
Run Code Online (Sandbox Code Playgroud)

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