Использование выражения генератора с fuzzywuzzy для получения совпадений в топ-2 - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь объединить использование генераторов с методом извлечения fuzzywuzzy, чтобы ускорить мой код, но изо всех сил стараюсь сохранить два верхних совпадения вместе с их результатами. Я мог сделать это раньше, когда я сохранял «результаты» в виде объекта List, и я не уверен, возможно ли / целесообразно ли выполнить те же операции с объектом-генератором.

from fuzzywuzzy import process

lookup_list = ['Pepsi Co','Steel United','ADIGAS','Consulting Group LLC','Company ABCDY','Blueberry Corp','FoodIndustries','PETCEO', 'OxChem']
vals = ['Pepsi', 'Steel Untd', 'ADIDAS','Consulting Group', 'Company ABC','Bluuberrie Cor']

results = (process.extract(val, lookup_list, scorer=fuzz.WRatio, limit=2) for val in vals)

best_match = None
best_score = 0

best_match_2 = None
best_score_2 = 0

for result in results: 
    best_score, best_match = (result[0][1], result[0][0]) if result[0][1] > best_score else (best_score, best_match)
    best_score2, best_match2 = .....

Желаемый выход:

best_score
95
best_match
'Consulting Group LLC'

best_score2
92
best_match
'Company ABCDY'

1 Ответ

0 голосов
/ 28 апреля 2020

задним числом это был довольно глупый вопрос, путаница с моей стороны проистекала из моей неопытности с производителями. Спасибо @Blckknght за ваше предложение, использование heapq.nlargest в значительной степени решило все проблемы.

from fuzzywuzzy import process

lookup_list = ['Pepsi Co','Steel United','ADIGAS','Consulting Group LLC','Company ABCDY','Blueberry Corp','FoodIndustries','PETCEO', 'OxChem']
vals = ['Pepsi', 'Steel Untd', 'ADIDAS','Consulting Group', 'Company ABC','Bluuberrie Cor']

results = (result for val in vals for result in process.extract(val, isv_lookup_list, scorer=fuzz.WRatio, limit=2))
top_two = heapq.nlargest(2, results, key=lambda x: x[1])

best_match_1, best_score_1 = top_two[0][0], top_two[0][1]
best_match_2, best_score_2 = top_two[1][0], top_two[1][1]

Вывод:

best_score
95
best_match
'Consulting Group LLC'

best_score2
92
best_match
'Company ABCDY'
...