Друзья, я ищу хороший алгоритм для поиска заданных многословных фраз в большом тексте. Для простоты я считаю, что текст маркирован и все слова уже найдены в нем. Таким образом, если у меня есть фраза из трех слов (на самом деле может быть больше слов), я сначала ищу позиции каждого из этих слов в тексте, поэтому массив целых чисел связан с каждым из трех слов в фраза. Не обязательно эти массивы имеют одинаковую длину.
Может быть, здесь будет хороший пример. Предположим, нам нужно найти фразу «все белые кошки» из этого текста:
... это просто фиктивный текст о кошках . В этом тексте я хочу написать фразу, что все кошки белые , но на самом деле это не все кошки белые . Но если есть какие-то белые кошки , в любом случае нам нужно написать о них. Все факты о кошках ...
Если предположить, что «это» слово имеет число 30, то мы можем создать эти числа для каждого слова Исходная фраза:
all: 48, 57, 76
white: 51, 60, 67
cats: 37, 49, 58, 68, 80
Как видите, мы можем объединить эти слова в разные фазы, и каждая «фраза» будет иметь свое «качество». Качество можно рассчитать как сумму расстояний от каждого слова до виртуального «центра фраз».
" all cats white " - это две хорошие фразы с качество 3,33. Все остальные слова можно комбинировать с фразами, но они будут низкого качества.
Мой вопрос заключается в том, чтобы найти хороший алгоритм для составления списка всех фраз, каждая фраза будет иметь центральную координату и количество слов , Я знаю, что это может быть сделано путем прямого вычисления расстояния между каждым словом до каждого слова, но это может занять годы, если у нас достаточно большой текст и достаточно длинные фразы.
Чтобы упростить, я думаю, чтобы ограничить поиск расстояние (скажем, 5 слов) от каждого слова.
Но затем я не могу себе представить, как рассчитать это быстрее.
Я чувствую, что для этого есть готовый алгоритм, но могу t найти один.
Спасибо!