Какой самый простой и быстрый алгоритм сравнения строк в случае небольшого количества шаблонов в словаре, чтобы найти в маленькой строке - PullRequest
0 голосов
/ 30 августа 2018

У меня есть большое количество текстовых файлов, содержащих небольшие разговоры, которые сами содержат небольшие строки (<1000 слов). У меня также есть список тегов и фраз, которые я хочу найти в этих текстовых файлах. </p>

Итак, мне нужен алгоритм поиска, который

  1. легко понять.
  2. легко реализовать.
  3. и дают довольно хорошие результаты с точки зрения эффективности времени (для каждого файла)

Есть предложения?

1 Ответ

0 голосов
/ 30 августа 2018

Если вы хотите найти слово в наборе слов, предпочтительной является структура данных. Три - это дерево, такое, что каждый узел передает букву и указывает на все следующие буквы в словаре.

Например, если набор 'cat', 'carrot', 'clock', корень дерева будет указывать на узел 'c'. Тогда 'c' будет указывать на 'a' и 'l', а 'a' - 't' и 'r'. Структура Trie может продолжаться до конца слов, или вы можете хранить отдельные суффиксы отдельно.

Теперь, если вы будете искать слово 'card', вы пройдете по узлам 'c' > 'a' > 'r' и увидите, что нет 'd', и придете к выводу, что слово отсутствует.

https://en.wikipedia.org/wiki/Trie


Вы можете адаптировать идею к вашему случаю, заменив «слово» на «предложение» и «букву» на «слово». Поскольку набор слов больше, чем алфавит, вам придется использовать хеш-карты в каждом узле, чтобы связать возможные слова с указателями на следующие узлы.

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


Для простоты разработки сначала рассмотрите возможность поиска слов в стандартном дереве.

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