Как имея большой текст, найти совпадения всех предложений?
Представим есть таблица sentences, где хранятся сотни тысяч каких-то предложений или словосочетаний.
И есть текст из 5000 слов, который ввел пользователь (к примеру).
Есть ли какой-то способ или алгоритм, чтобы рационально используя вычислительные ресурсы выделить в тексте все совпадения (например через str_replace) из всей таблицы sentences?
1. Вам же не надо выделять сотни тысяч совпадений, выделять надо только те, которые будут выведены на экран пользователя.
Поэтому задача разбивается на 2:
- поиск совпадений и их постраничный вывод
- подсветка результатов вывода
именно так и делают ПС.
Скорее всего вам придётся строить инвертированный (обратный) индекс, как у Поисковых Систем, но привязывать его не к URL страниц, а к номеру записи в БД.
А почему, собственно, вы эту задачу хотите с помощью постгреса решать, а не с помощью намного более подходящих решений на базе инвертированных индексов - Lucene, Elasticsearch и т. д.?
В самом простом случае надо поделить текст на предложения(по точкам очевидно), а потом найти в базе каждое из предложений, это не должно быть очень долго и ресурсозатратно.