Python:if / else在函数内部构造

时间:2018-12-12 06:00:27

标签: python function fuzzywuzzy

我有一个函数可以计算两个文本的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多个记录。

请保存我的想法。

1 个答案:

答案 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