Как найти названия компаний в тексте с помощью Python

У меня есть список должным образом отформатированных названий компаний, и я пытаюсь выяснить, когда эти компании появляются в документе. Проблема в том, что они вряд ли появятся в документе точно так же, как в списке. Например, 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 ответ


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

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

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


Есть идеи?

10000