Это способ, которым я заполнил candidates
- mpg
- это Pandas DataFrame:
for s in mpg['name'].values:
doc = nlp(s)
for ent in doc.ents:
if ent.label_ == 'ORG':
candidates.append(ent.text)
Тогда, скажем, у нас есть короткий список данных об автомобилях только для проверки:
candidates = ['buick'
,'buick skylark'
,'buick estate wagon'
,'buick century']
В приведенном ниже методе используется fuzz.token_sort_ratio
, который описывается как «возвращение меры сходства последовательностей между 0 и 100, но сортировка токена перед сравнением». Попробуйте некоторые из них, которые частично описаны здесь: https://github.com/seatgeek/fuzzywuzzy/issues/137
results = {} # dictionary to store results
companies = ['buick'] # you'll have more companies
for company in companies:
results[company] = process.extractBests(company,candidates,
scorer=fuzz.token_sort_ratio,
score_cutoff=50)
И результаты:
In [53]: results
Out[53]: {'buick': [('buick', 100),
('buick skylark', 56),
('buick century', 56)]}
В этом случае, используя 80 в качестве отсечки оценка будет работать лучше, чем 50.