java solr lucene nlp tokenize

java - ¿Es posible buscar palabras dentro de un índice Lucene por parte del discurso?



solr nlp (1)

Tengo un gran conjunto de documentos almacenados dentro de un índice Lucene y estoy usando un CustomAnalyzer que básicamente hace tokenización y derivación para el contenido de los documentos.

Ahora, si busco en los documentos la palabra "amor", obtengo resultados donde el amor se usa como sustantivo o como verbo, mientras que solo quiero aquellos documentos que usan el amor solo como verbo.

¿Cómo se puede implementar esa característica si también puedo mencionar la parte de la palabra junto con la palabra para que los resultados solo tengan amor usado como verbo y no como sustantivo?

Puedo pensar en una forma de etiquetar inicialmente cada palabra del documento y almacenarlo agregando el POS con la palabra ''_'' o algo así y luego buscar en consecuencia, pero quería saber si hay un forma más inteligente de hacer esto en Lucene.


Puedo pensar en seguir enfoques.

Enfoque 1

Tal como lo mencionó: reconozca y agregue la etiqueta de parte del discurso al término real mientras indiza. Haz lo mismo mientras consultas.

Me gustaría discutir los inconvenientes asociados.

Contras:

1) Los requisitos futuros pueden exigirle obtener resultados independientemente de la parte de la oración. El índice que contiene términos modificados no funcionará.

2) Es posible que desee ejecutar una BooleanQuery como "term: noun o adjetivo". Debe escribir el expansor de consultas usted mismo.

Enfoque 2

Intenta usar la función Payloads de Lucene.

Aquí hay un breve tutorial sobre las cargas útiles de Lucene .

Pasos para abordar su caso de uso.

1) Guarde la etiqueta de parte del discurso en forma de una carga útil.

2) Tener clases de similitud personalizadas para cada etiqueta de parte de la oración.

3) Basándose en la consulta, asigne la similitud personalizada correspondiente al IndexSearcher. Por ejemplo, asigne NounBoostingSimilarity para una consulta de sustantivo.

4) Aumentar o "Reducir" el puntaje de un documento basado en la carga útil. Ejemplo dado en el tutorial anterior.

5) Escribir un recopilador personalizado para filtrar los documentos con puntajes que no se ajusten a la lógica de aumento de puntaje anterior.

Pros de este enfoque es que el índice sigue siendo compatible para cualquier otra búsqueda normal.

Contras:

1) Gastos generales de mantenimiento: debe mantener múltiples IndexSearchers para cada similitud. 2) Solución algo complicada para codificar.

Para ser sincero, no estoy satisfecho con mi propia solución, pero solo quería hacerle saber que existe otra manera. Todo depende de su escenario, si el proyecto es un proyecto académico de una sola vez o uno comercial, etc.