Python: if / else конструирует внутри функций - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть функция, которая вычисляет 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 голосов
/ 12 декабря 2018

Если я правильно понимаю, что вы хотите сделать, вот мое предложение:

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

И вот более питоническая форма этого:

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
...