как подходить к запросам фраз и группировке терминов - PullRequest
1 голос
/ 23 июня 2011

Я новичок в Lucene, и мой проект заключается в предоставлении специализированного поиска для набора буклетов. Я использую Lucene Java 3.1.

Основная идея состоит в том, чтобы помочь людям узнать, где искать информацию в (скорее большие и сухие) буклеты, проконсультировавшись с индексом, чтобы узнать, какие номера буклетов и страниц соответствуют их запросу. Каждый документ в моем указателе представляет определенную страницу в одном из буклетов.

До сих пор я был в состоянии успешно вычистить необработанный текст из буклетов, вставить его в индекс и запросить его в порядке, используя StandardAnalyzer на обоих заканчивается.

Итак, вот мой общий вопрос:
Многие запросы в индексе будут включать поиск названий мест, упомянутых в буклеты. В некоторых географических названиях используются нотационные варианты. Например, в основном тексте на одной странице он будет называться «Корабль-Крик», но на диаграмме карты в другом месте он может быть указан как «Корабль-Кр.» или даже "Корабль СК". Мне нужно знать, как подходить к тому, чтобы рассматривать два последовательных слова как один термин и добавлять нотационные варианты в качестве синонимов.

Моя цель, конечно, найти любой из вариантов и отловить все вхождения. Если я ищу (Корабль И (Cr Ck Creek)), это не дает мне того, что я хочу, потому что другие слова могут появляться между [ship] и [cr] / [ck] / [creek], приводя к ложному срабатыванию.

Итак, в двух словах, мне, вероятно, все еще нужны базовые вещи, предоставляемые StandardAnalyzer, но с определенной группировкой терминов, чтобы выдавать географические названия в виде полных терминов и, возможно, вставить синонимы для охвата вариантов.

Например, текст "... разрешенный от устья Шип-Крик вверх по течению до ..." будет в результате получаются жетоны [позволено], [рот], [корабельный залив], [вверх по течению]. Возможно через TokenFilter Кстати, термин [корабельный ручей] расширился бы до [корабельный ручей] [корабельный ск] [корабельный кр].

В качестве бонуса было бы неплохо отнестись к более сложному тексту "... за исключением кораблей, птиц и Кэмпбелл ручьи, где предел ... ", как [кроме], [Крик корабля], [Крик птицы], [Кэмпбелл-Крик], [где], [предел].

Это похоже на довольно простой вариант использования, но мне не ясно, как я мог бы использовать существующие компоненты из Lucene contrib или SOLR для достижения этой цели. Должно ли обнаружение и объединение выполняться в каком-то TokenFilter? Нужна ли пользовательская реализация Analyzer?

Некоторые из терминов группировки, вероятно, могут быть выполнены эвристически [], [ручей] - это [ ручей] но у меня также есть исчерпывающий список мест, упомянутых в тексте, если это поможет.

Спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

0 голосов
/ 24 июня 2011

Вы можете использовать Solr Фильтр синонимов. Просто установите "creek", чтобы иметь синонимы "ck", "cr" и т. Д.

Мне не известны какие-либо существующие функции длярешите вашу «бонусную» проблему.

...