Python: if/else 在函数内部构造
Python: if/else constructs inside functions
我有一个函数可以计算两个文本的 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,则 return 分数。我正在将此代码应用于 2000 多条记录。
请把你的想法留给我。
如果我理解正确你想做什么,我的建议是:
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
我有一个函数可以计算两个文本的 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,则 return 分数。我正在将此代码应用于 2000 多条记录。
请把你的想法留给我。
如果我理解正确你想做什么,我的建议是:
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