Как найти названия компаний в тексте с помощью Python - PullRequest
1 голос
/ 15 мая 2019

У меня есть список должным образом отформатированных названий компаний, и я пытаюсь выяснить, когда эти компании появляются в документе.Проблема в том, что они вряд ли появятся в документе точно , как в списке.Например, Visa Inc может отображаться как Visa или American Airlines Group Inc может отображаться как American Airlines.

Как мне перебрать все содержимое документа, а затем вернуть правильно отформатированное название компании, когда будет найдено близкое совпадение?

Я пробовал и fuzzywuzzy, и difflib.get_close_matches, но проблема в том, что он смотрит на каждое отдельное слово, а не на группы слов:

from fuzzywuzzy import process
from difflib import get_close_matches

company_name = ['American Tower Inc', 'American Airlines Group Inc', 'Atlantic American Corp', 'American International Group']

text = 'American Tower is one company. American Airlines is another while there is also Atlantic American Corp but we cannot forget about American International Group Inc.'

#using fuzzywuzzy
for word in text.split():
    print('- ' + word+', ', ', '.join(map(str,process.extractOne(word, company_name))))

#using get_close_matches
for word in text.split():
    match = get_close_matches(word, company_name, n=1, cutoff=.4)
    print(match)

1 Ответ

1 голос
/ 17 мая 2019

Я работал над похожей проблемой.Fuzzywuzzy внутренне использует difflib, и оба они работают медленно на больших наборах данных.

конвейер Криса ван ден Берга преобразует названия компаний в векторы по 3 грамма, используя матрицу TF-IDF, а затем сравнивает векторы, используя косинусное сходство.

Конвейер быстрый и дает точные результаты и для частично согласованных строк.

...