Мога да се сетя за следните подходи.
Подход 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