Buenas tardes a toda la comunidad.
Preguntaba si hay alguien con experiencia en herramientas como Lemur o Indri para el desarrollo de motores de búsqueda. Muchas gracias.
No se que tan similar sea el sistema de lucene pero explico mi duda de todas formas.
Es para un sistema de búsqueda de reportes médicos. Tengo indexados un poco
mas de 100 mil reportes. Estoy trabajando provisionalmente con la función de busqueda Okapi.
Tengo también un archivo de queries de prueba. Pero no logro entender como
debo usar todas estas queries para generar resultados de busqueda.
No se que tan similar sea el sistema de lucene pero explico mi duda de todas formas.
Es para un sistema de búsqueda de reportes médicos. Tengo indexados un poco
mas de 100 mil reportes. Estoy trabajando provisionalmente con la función de busqueda Okapi.
Tengo también un archivo de queries de prueba. Pero no logro entender como
debo usar todas estas queries para generar resultados de busqueda.
Un motor de búsqueda tiene dos operaciones importantes: indexación y búsqueda. Y por lo menos tiene un API para realizar estas operaciones. Generalmente tiene también un conjunto de programas para línea de comandos, cuyos fuentes ilustran el uso del API. Pero evidentemente hay más ciencia en todo esto. Antes de indexar ciegamente, y dependiendo de la aplicación, generalmente necesitas extraer texto, eliminar superfluos, suavisar, normalizar, hacer stemming, etc. etc..
Por eso cuando me dices "reportes médicos" y lo primero que pienso no es lucene (el motor de búsqueda), sino algo basado en UIMA (el administrador de información no estructurada), como por ejemplo
http://adf.ly/1f21tV
( http://adf.ly/1f21uq ).
Aclaración a la pregunta
Me voy por detalles. Efectivamente, todo el preprocesamiento de texto ha
sido realizado. He obviado el stemming y la eliminación de palabras sin significado porque estoy usando una base de datos similar a la que mencionas. Todos los términos médicos los he pasado a códigos CUI, que son parte del sistema unificado de lenguaje médico ( UMLS ). Es decir, ahora no tengo documentos en palabras, los tengo en códigos. La indexación se ha facilitado bastante gracias a esto. Ahora el problema. Para saber que lo que estoy haciendo está BIEN, necesito un baseline, "algo" con qué comparar. Y para eso estoy usando las API de Indri (lo que antes era Lemur). Tengo cerca de 200 queries para el motor de búsqueda (que eventualmente serán codificadas a CUI) cuyo resultados conozco. No se cómo utilizar estás queries con Indri para generar un resultado.
Respuesta a la aclaración
Siento mucho no poder ayudarte con eso, no conozco lemur. Pero en mi
humilde experiencia, el API de consulta al motor de búsqueda me ha parecido más sencillo que la indexación. ¿Me pasas el link para que vea el API?.Tal vez tenga un poco de tiempo este finde para mirarlo. Tienes casi todo lo que necesitas para evaluar. Sólo te faltan algunas cosas. La evaluación de un sistema de Obtención de información siempre está dado por la relevancia de un resultado de búsqueda frente a una necesidad de información. Ese "algo" contra lo que tienes que comparar es la opinión de un experto sobre la relevancia de un conjunto de documentos sobre los que trabajas. La relevancia es binaria (relevante o no). Ahora, hay otras formas de evaluar tu obtención de información, como la latencia de la búsqueda, la capacidad de manejar caudal, los límites del tamaño del corpus, etc. etc. Pero la medida de relevancia domina casi absolutamente. Cada documento del subconjuto debe ser marcado su relevancia. Y la consulta debe estar libre de problemas de mala formación con respecto a la necesidad de información con la que el experto marcó cada documento. Con estos datos puedes calcular la "medida-f'. Que es la medida estándar para medir relevancia. Para información de cómo calcular F1 puedes ver en wikipedia [1] y [2]. Puedes hacer esto, digamos, para los primeros diez resultados que te devuelve el motor, de una muestra aleatoria, digamos de 500 documentos. De una forma más general, puedes hacer una curva precision-recall tomando sub-conjuntos de los resultados: El primer resultado, los primeros dos resultados, los primeros tres, etc. [1] http://en.wikipedia.org/wiki/Precision_and_recall
[2] http://en.wikipedia.org/wiki/F1_Score
Otra respuesta
Como ya te comentaron puedes usar Lucene, existe una api php en Zend
Framework Documentacion:http://adf.ly/1f21wrY otra respuestaOtra opción es usar Xapian, que está escrito en C++ y tiene bindingspara Perl, Python, PHP, Java, Tcl, C#, Ruby y Lua. http://adf.ly/1f21xr