Программное обеспечение для выполнения обратного поиска - сопоставление основного текста с известной фразой

У меня есть большой список известных фраз. Учитывая текст (скажем, твит), я хотел бы посмотреть, содержит ли он известную фразу из большого списка. Я уверен, что что-то подобное должно существовать (возможно, из новых когнитивных костюмов от IBM Watson/Microsoft Cortana или, может быть, что-то вроде Apache lucene). К сожалению, я не знаю названия этой проблемы, чтобы определить продукт, который ее решает :)

Ответы (2)

То, что вы пытаетесь сделать, является частью обработки естественного языка, и одним из важных инструментов для этого является Python Natural Language Toolkit ( nltk ).

Хорошую отправную точку можно найти в статье и сопоставлении блокнота Jupyter fuzzy-sentence-matching-python, в которой обсуждаются токенизация, нечувствительность к регистру, стоп-слова, формирование корней, лемматизация и указывают на частичное совпадение.

Процесс, который вам нужно будет выполнить, заключается в следующем:

  1. Возьмите свои записи в списке и для каждой записи создайте токенизированный, фиксированный регистр, стоп-слова, основу, лемматизированный отпечаток пальца из этой записи.
  2. Возьмите свой твит или что-то еще и сделайте то же самое.
  3. Найдите в своем списке отпечатков пальцев количество совпадений с отпечатком твита.
  4. Любой результат, превышающий заданный порог, может быть затем проанализирован, чтобы увидеть, приведет ли сокращение твита к достаточно близкому совпадению, чтобы его можно было считать цитатой.

Книга по использованию nltk доступна в Интернете, но это лишь одна из тысяч книг и статей по этому вопросу.

Это обычная задача поиска. Вам просто нужно сначала объединить все известные вам фразы в один поисковый запрос. С регулярными выражениями это проще всего сделать с помощью оператора чередования |. Для поисковых систем с булевыми операторами используйте OR.

Чтобы порекомендовать конкретную программу (поскольку это «Рекомендации по программному обеспечению»), попробуйте grep. Вы можете создать регулярное выражение программно, а затем передать его с grepпомощью xargs.