Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Поиск близких слов по тексту


Автор: Ch0bits 15.7.2015, 13:01
Здравствуйте, коллеги!
Прикручиваю поиск к сайту и встала задача наглядно показывать результаты. С самим поиском проблем нет. Использую Sphinx. Но в результате нужно показать не весь текст найденного документа, а как в поисковиках, только те части, которые наиболее подходят по поисковому запросу. Sphinx умеет выдавать список с учетом морфологии, которые были учтены в документе при поиске. Умеет даже сам оборачивать их в нужный тег в тексте, но не выделять участки.
Например:
Код

Это исходный текст документа, где есть нужное нам СЛОВО1 а рядом с ним СЛОВО2 тут еще 1000 слов и СЛОВО1 СЛОВО2 и радом СЛОВО3 ну а в самом конце через 100 слов ещё СЛОВО2.

Соответственно пользователь искал что-то типа: "Как мне СЛОВО1 в СЛОВО2 с СЛОВО3 над СЛОВО4?(которое не нашлось)" Использовался алгоритм BM25+Proximity
Мне же нужно показать только пару отрывков исходного текста c фиксированной максимальной длиной, где поисковые слова встречаются наиболее близко друг от друга и их наиболее часто. Например:
Код

...нужное нам СЛОВО1 а рядом с ним СЛОВО2 тут...и СЛОВО1 СЛОВО2 и радом СЛОВО3 ну а в... 

Что-то типа кластеризации по словам и выдачи наиболее плотных групп. Ничего путного кроме переборов в голову не лезет :( А решение казалось бы должно быть очень простым.

Автор: Ch0bits 15.7.2015, 18:55
Кажется я уже нашел как сделать это средствами самого Sphinx'а. Нужно использовать SELECT c функцией SNIPPET, которая делает тоже самое что BuildExcerpts, но применимо к конкретной строке результата http://sphinxsearch.com/docs/current.html#api-func-buildexcerpts

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)