Възможно ли е да търсите думи в индекс на Lucene по част на речта

Имам голям набор от документи, съхранени в индекс на Lucene, и използвам customAnalyzer, който основно прави токенизиране и произтичане на съдържанието на документите.

Сега, ако търся вътре в документите за думата „любов“, получавам резултати, където любовта се използва или като съществително, или като глагол, докато искам само онези документи, които използват любовта само като глагол.

Как може да се приложи такава функция, където мога да спомена и частта на речта на думата заедно с думата, така че резултатите да имат само любов, използвана като глагол, а не като съществително?

Мога да измисля начин първоначално да маркирам част от речта на всяка дума от документа и да я съхраня, като добавя POS към думата с '_' или нещо подобно и след това да търся съответно, но исках да знам дали има по-интелигентен начин да направите това в Lucene.


person London guy    schedule 13.04.2013    source източник
comment
имате ли краен набор от горните изисквания? като съществително име, глагол и др.   -  person phanin    schedule 13.04.2013
comment
Да, бих искал да се огранича главно за собствено име, общо име и глаголи.   -  person London guy    schedule 13.04.2013


Отговори (1)


Мога да се сетя за следните подходи.

Подход 1

Точно както споменахте: Разпознайте и добавете етикета за част от речта към действителния термин, докато индексирате. Направете същото, докато правите заявки.

Бих искал да обсъдя свързаните с това недостатъци.

Недостатъци:

1) Бъдещите изисквания може да изискват от вас да получавате резултати независимо от частта на речта. Индексът, който съдържа модифицирани термини, няма да работи.

2) Може да искате да изпълните BooleanQuery като "термин: съществително или прилагателно". Трябва сами да напишете разширителя на заявката.

Подход 2

Опитайте да използвате функцията Payloads на Lucene.

Ето кратък урок за Lucene Payloads.

Стъпки за справяне с вашия случай на употреба.

1) Съхранявайте етикета за част от речта под формата на полезен товар.

2) Имайте персонализирани класове за сходство за всеки таг за част от речта.

3) Въз основа на заявката, присвоете съответното CustomSimilarity на IndexSearcher. Например, задайте NounBoostingSimilarity за заявка за съществително.

4) Увеличете или „Намалете“ оценката на документ въз основа на полезния товар. Примерът е даден в горния урок.

5) Напишете персонализиран колектор за филтриране на документите с резултати, които не съответстват на горната логика за повишаване на резултата.

Плюсовете на този подход са, че индексът остава съвместим за всяко друго нормално търсене.

Недостатъци:

1) Разходи за поддръжка: трябва да поддържате множество IndexSearchers за всяко сходство. 2) Донякъде сложно за кодиране решение.

Честно казано, не съм доволен от собственото си решение, но просто исках да ви уведомя, че съществува друг начин. Всичко зависи от вашия сценарий, дали проектът е академичен еднократен проект или комерсиален и т.н.

person phanin    schedule 13.04.2013