Использование синонимов Lucene

Проанализировав индексы и запросы Вы могли бы хотеть только большим количеством аппаратных средств. Еще несколько концертов поршня могли бы добиться цели.

16
задан Ed. 9 August 2009 в 15:58
поделиться

3 ответа

Есть вклад в проект Lucene под названием "wordnet". Согласно его документация :

Этот пакет использует синонимы, определенные WordNet, для построения индекса Lucene, хранящего их, который, в свою очередь, может использоваться для расширения запроса. Обычно вы запускаете Syns2Index один раз, чтобы построить индекс запроса / «базу данных», а затем вызываете SynExpand.expand (...), чтобы развернуть запрос.

Он включает в себя пример того, что он делает:

Если вы передадите запрос «большая собака», он распечатает:

Запрос: большой взрослый ^ 0,9 плохой ^ 0,9 великодушный ^ 0,9 хвастливый ^ 0,9 хвастливо ^ 0,9 щедрый ^ 0,9 щедрый ^ 0,9 хвастливый ^ 0,9 кукарекающий ^ 0,9 свободный ^ 0,9 давящий ^ 0,9 выросший ^ 0,9 взрослый ^ 0,9 красивый ^ 0,9 крупный ^ 0,9 щедрый ^ 0,9 великодушный ^ 0,9 важный ^ 0,9 открытый ^ 0,9 видный ^ 0,9 раздутый ^ 0,9 тщеславно ^ 0,9 высокомерно ^ 0,9 dog andiron ^ 0,9 blackguard ^ 0,9 bounder ^ 0,9 cad ^ 0,9 chase ^ 0,9 click ^ 0,9 detent ^ 0,9 dogtooth ^ 0,9 firedog ^ 0,9 frank ^ 0,9 frankfurter ^ 0,9 fump ^ 0,9 heel ^ 0,9 hotdog ^ 0,9 hound ^ 0,9 pawl ^ 0,9 tag ^ 0,9 хвост ^ 0,9 след ^ 0,9 след ^ 0,9 weenie ^ 0,9 wiener ^ 0,9 wienerwurst ^ 0,9

Вы видите, что оригинальные слова («большой» и «собака») не имеют никакого веса. Синонимы, однако, имеют весовой коэффициент (0,9), который вы можете настроить самостоятельно.

Он поставляется вместе со стандартным дистрибутивом Lucene в каталоге "contrib".

12
ответ дан 30 November 2019 в 23:00
поделиться

Вы можете получить объект Query после анализа входной строки запроса с помощью QueryParser.parse ().

В большинстве случаев запрос верхнего уровня является логическим запросом с подзапросами в качестве дочерних. Вы можете рекурсивно выполнять итерацию по объекту запроса. Когда вы нажимаете объект TermQuery или PhraseQuery, вы можете получить (под) запрос и заменить этот объект запроса логическим объектом запроса, состоящим из его синонимы, если таковые имеются.

1
ответ дан 30 November 2019 в 23:00
поделиться

Я предпочитаю выполнять поиск, используя всю введенную фразу и взвешивая все, что возвращено, тяжелее, чем следующая серия поисков. Затем мне нравится перебирать каждое слово во фразе и искать с ним, получая более низкие результаты. Затем я суммирую оценки для всех элементов, возвращенных более одного раза, и соответствующим образом сортирую результаты. Возможно, это не лучший способ сделать это на 100% ... но в прошлом он отлично работал у меня.

0
ответ дан 30 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: