Как найти ключевые слова в абзаце текста? - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь найти быстрое (в миллисекундах или секундах) решение для ввода введенного блока текста и большого списка (11 миллионов) конкретных слов / фраз для проверки. Итак, я хотел бы посмотреть, какие слова / фразы есть во введенном абзаце?

Мы используем Javascript и имеем SQL, MongoDB и DynamoDB в качестве существующих хранилищ данных, в которые мы можем интегрировать это решение.

Я выполнил поиск по этой проблеме, но могу найти только проверку на наличие слов в тексте. не наоборот.

Все идеи приветствуются!

1 Ответ

0 голосов
/ 12 апреля 2019

В подобных случаях вы хотите удалить как можно больше ненужных данных. Предполагая, что заказ имеет значение:

  1. Перво-наперво, убедитесь, что у вас есть индекс B-дерева, построенный на базе данных фраз, сгруппированных по фразе. Это ускорит время поиска диапазона.
  2. Пусть n = 2 (или 1, если вы в этом)
  3. Разделите текстовый блок на фразы длиной n и выполните запрос по фразам в словаре, которые начинаются с любой из пар фраз ('My Phrase%'). Благодаря индексу это не будет выполнять 4521 миллион сравнений строк.
  4. Запомните фразы, которые точно совпадают
  5. Пусть n = n + 1
  6. Повторите с шага 3, используя сокращенный словарь, пока сокращенный словарь не станет пустым

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

Кроме того, я почти уверен, что основал этот алгоритм на существующем, но я не помню его название, поэтому бонусные баллы могут получить те, кто может его назвать. Я думаю, что это как-то связано с хранилищем данных / майнингом и вычислением частот и шаблонов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...