我有一个函数可以计算两个文本的fuzzywuzzy
得分:
def fuzzywuzzy(text_1, text_2):
scores = {
'ratio' : fuzz.ratio(tn.normalize_title(text_1),tn.normalize_title(text_2)) / 100,
'partial_ratio' : fuzz.partial_ratio(tn.normalize_title(text_1),tn.normalize_title(text_2)) / 100,
'token_sort_ratio' : fuzz.token_sort_ratio(tn.normalize_title(text_1),tn.normalize_title(text_2)) / 100,
'token_set_ratio' : fuzz.token_set_ratio(tn.normalize_title(text_1),tn.normalize_title(text_2)) / 100}
return scores
从上面的代码可以看出,我在计算分数之前将文本1和2归一化。
fuzzywuzzy
函数在这里被调用:
event['scores'] = scores(v_ data['text1'], event['_source']['event_record']['text2'])
我需要修改查询,并说如果token_set_ratio
的模糊分数的值大于0.99,则返回分数。我将此代码应用于2000多个记录。
请保存我的想法。
答案 0 :(得分:1)
如果我正确理解了您想做什么,这是我的建议:
def fuzzywuzzy(text_1, text_2, cutoff=0.99):
token_set_ratio = fuzz.token_set_ratio(tn.normalize_title(text_1),tn.normalize_title(text_2)) / 100
if token_set_ratio > cutoff:
return {
'ratio' : fuzz.ratio(tn.normalize_title(text_1),tn.normalize_title(text_2)) / 100,
'partial_ratio' : fuzz.partial_ratio(tn.normalize_title(text_1),tn.normalize_title(text_2)) / 100,
'token_sort_ratio' : fuzz.token_sort_ratio(tn.normalize_title(text_1),tn.normalize_title(text_2)) / 100,
'token_set_ratio' : token_set_ratio}
return None
然后您可以执行类似的操作(假设有事件列表):
for event in events:
s = scores(...)
if s:
event['scores'] = s
这是它的更pythonic形式:
import fuzz
import tn
def fuzzywuzzy(text_1, text_2, cutoff=0.99):
def _compute_ratio(fn):
return fn(tn.normalize_title(text_1), tn.normalize_title(text_2)) / 100
token_set_ratio = _compute_ratio(fuzz.token_set_ratio)
if token_set_ratio > cutoff:
return {
'ratio': _compute_ratio(fuzz.ratio),
'partial_ratio': _compute_ratio(fuzz.partial_ratio),
'token_sort_ratio': _compute_ratio(fuzz.token_sort_ratio),
'token_set_ratio': token_set_ratio,
}
return None