Práctica 3: Búsqueda de información mediante la librería Lucene Sistemas de Información Grado de Informática Dpto. de Informática e Ingeniería de Sistemas, Universidad de Zaragoza Escuela de Ingeniería y Arquitectura 4 de noviembre de 2012 1. Objetivos Hoy en día numerosos Sistemas de información emplean técnicas de búsqueda y recuperación de información (Information Search and Retrieval -ISR-) para obtener documentos electrónicos y cualquier tipo de colección documental digital (metadatos de diferentes elementos, contenidos de bases de datos relacionales, etc.) con el objetivo de emplear la información y datos relevantes de la forma pertinente. En esta práctica se presenta la librería Apache Lucene que permite incorporar mecanismos de indexación y búsqueda de información en aplicaciones implementadas en diversos lenguajes de programación (Java,.Net, Python, etc.). En mayor detalle, los objetivos de esta práctica son: Familiarizarse con la librería Lucene probando el ejemplo proporcionado. Implementar una aplicación con interfaz de texto que permita la indexación de un determinado directorio. Implementar una aplicación con interfaz de texto que permita la búsqueda de documentos en el directorio indexado con la aplicación anterior mediante preguntas basadas en palabras clave. Añadir la funcionalidad de búsqueda basada en palabras clave a la aplicación web bancaria desarrollada en las sesiones anteriores para realizar búsquedas de usuarios. El entorno de desarrollo a utilizar ser JDK 1.7. 2. Contenidos La práctica consta de tres bloques, de los cuales el primero consiste en responder a una serie de preguntas relacionadas con la librería Lucene, el segundo establece que se realicen dos aplicaciones con interfaces de texto que permitan la indexación y búsqueda 1
de documentos en un determinado directorio, y el tercero requiere ampliar la aplicación Web construida en las sesiones anteriores. Además se requiere que se encapsule e instale la nueva versión de la aplicación desarrollada en el servidor Tomcat. 2.1. Introducción a la librería Lucene Lucene permite la creación de un índice inverso en el que se añaden documentos para posteriormente buscarlos. Las clases fundamentales de la librería se enumeran a continuación: IndexWriter: Permite la construcción y actualización del índice invertido que va a emplear el sistema de recuperación de información. En Lucene los índices son autoincrementales, es decir una vez creados se pueden ir añadiendo a ellos documentos susceptibles de ser indexados. Document: Los documentos son la unidad de indexación y búsqueda en Lucene. Un objeto de este tipo representa un único documento. No obstante, se debe señalar que un objeto de este tipo no se tiene porque corresponder con un fichero sino que constituye la unidad de indexación del sistema de búsqueda construido, así por ejemplo podría representar una tupla de una determinada base de datos. Los objetos Document se modelan como un conjunto de campos(fields) de la forma nombre,valor. Field: Cuando se crea un objeto Field además del nombre del campo y su valor, se debe indicar si se desea almacenar el valor del campo en el índice o no. En el caso de que el valor del campo sea razonablemente pequeño, Lucene permite que sea almacenado en el índice. Los campos almacenados en el índice, en lugar de utilizar el objeto Document para localizar los datos originales, pueden emplear directamente el índice. En general cuando se desea tokenizar el valor del campo se emplea la subclase TextField, mientras que si no se desea tokenizar se emplea StringField. Gracias a esta división en campos, es posible tratar con documentos que posean cierta estructura, por ejemplo para indexar correos electrónicos, se pueden considerar cuatro campos que contengan el remitente, los destinatarios, el título o subject y el contenido del correo, respectivamente. Analyzer: Los analizadores son los encargados de procesar los textos para obtener sus correspondientes representaciones internas (vista lógicas). Se emplean tanto en la creación de índices como en los procesos de búsqueda, ya que las querires deben ser procesadas con el mismo criterio que los documentos indexados. Lucene proporciona diversos analizadores, por ejemplo el SimpleAnalyzer que simplemente divide el texto en palabras y convierte todo a minúsculas o el StandardAnalyzer que además elimina stopwords (por defecto, las del idioma inglés). IndexSearcher: Constituye la base para realizar búsquedas en un índice de documentos. Para realizar una búsqueda se emplea el método search(), que proporciona los documentos que satisfacen las condiciones de la búsqueda indicadas en un objeto Query. emphquery: Es una clase abstracta que proporciona los mecanismos necesarios para formular las necesidades de información. 2
Hit: Los objetos Hit representan cada uno de los resultados obtenidos al realizar cierta consulta en un determinado índice. A través de estos objetos se puede acceder al documento al que se refiere el resultado. Además cada Hit tiene asociada una puntuación (score) que representa la relevancia del documento asociado al Hit para la pregunta formulada. Para facilitar la familiarización con la biblioteca Lucene, se proporciona un ejemplo que permite la indexación de cuatro documentos de texto codificados en UTF-8 (uno.txt, dos.txt, tres.txt y cuatro.txt) y la búsqueda en el índice creado (el índice creado se almacena en memoria). Realizar las siguientes consultas e indicar cuál es el resultado de la búsqueda: 1. tomcat 2. tomcat OR lucene 3. Lucene 4. of 5. tomcat 6. tomcat* 7. jakarta 8. Lucene -apache Modificar el código para que en lugar de utilizar el StandardAnalyzer se use el SimpleAnalyzer. Indexe de nuevo los ficheros y repita la consulta of. Cuál es la nueva respuesta? por qué? 2.2. indexación y búsqueda de documentos en un determinado directorio Desarrollar una aplicación que realice búsquedas de documentos en un determinado directorio. El directorio puede contener subdirectorios con documentos que también deben ser indexados. El tamaño del directorio puede ser considerable por lo que se aconseja no crear el índice invertido en memoria RAM. Además, en general, los documentos estarán escritos en castellano. Realizar dos aplicaciones con interfaces de texto. La primera aplicación debe crear el índice adecuado para posteriormente poder realizar búsquedas sobre dicho índice y debe recibir como parámetro la ruta del directorio que se desea indexar. La segunda aplicación debe realizar búsqueda de documentos que satisfacen las restricciones establecidas en una pregunta formulada mediante palabras clave (una query). 2.3. Búsqueda basada en palabras clave de datos almacenados en una base de datos relacional (Opcional) Ampliar la aplicación Web construida en las sesiones anteriores para permitir búsqueda de usuarios basada en palabras clave. En el formulario de búsqueda se podrán indicar diferentes palabras que especifiquen restricciones sobre los clientes que se deseen buscar, por ejemplo: 1946, @hotmail.com, 11111111H, López 1967, etc. 3
3. Entrega de la práctica La práctica se realizará en parejas. Cuando se finalice se debe entregar un fichero tar denominado practica 3.tar con el siguiente contenido: 1. Un fichero de texto denominado autores.txt que contendrá el NIA, los apellidos y el nombre de los autores de la práctica en las primeras líneas del fichero. Por ejemplo: NIA Apellidos Nombre - 345689 Rodríguez Quintela Sabela 345689 Caamaño Cives Antón Opcionalmente, a continuación, se podrá incluir en dicho fichero un resumen de las principales dificultades encontradas durante la realización de la práctica, y notas a considerar. 2. Un directorio denominado src, que contendrá los ficheros fuentes (.java,.html,.jsp) utilizados en la implementación de la práctica organizados de la forma que se considere más adecuada. 3. Un directorio denominado WEB-INF, que contendrá el fichero web.xml utilizado en la implementación del tercer bloque de la práctica. 4. Un fichero de texto informeapartado1.txt que contendrá las respuestas a las preguntas formuladas en el apartado 1 de la práctica. Opcionalmente en este documento se podrán añadir comentarios del modo de funcionamiento de la librería argumentando los comentarios con pruebas. 5. Un fichero ejecutable (shell script) denominado compila.sh que contendrá las instrucciones necesarias para crear las aplicaciones requeridas en el apartado 2 de la práctica. 6. Un fichero ejecutable (shell script) denominado ejecutaindexador.sh que contendrá las instrucciones necesarias para realizar la indexación de los documentos contenidos en un determinado directorio que se le pasará como parámetro al script. 7. Un fichero ejecutable (shell script) denominado ejecutabuscador.sh que contendrá las instrucciones necesarias para realizar la búsqueda de documentos indexados anteriormente relevantes para una query que se le pasará como parámetro al script. 8. Un fichero ejecutable (shell script) denominado crearwar.sh que contendrá las instrucciones necesarias para crear la aplicación Web requerida en el apartado 3 y que se deberá denominar MiBancoP3. 9. Un fichero ejecutable (shell script) que debe denominarse instalawar.sh que contendrá las instrucciones necesarias para instalar la aplicación Web requerida en el apartado 3 en el servidor web Tomcat disponible en el directorio $CATALI- NA HOME y lanzar el servidor Tomcat. 4
Al descomprimir el fichero.tar se deben extraer los ficheros y directorios indicados en el directoriopractica 3. Es importante seguir las convenciones de nombrado y la estructura de ficheros y directorios descrita. Para la entrega del fichero.tar, se utilizará el comando someter en la máquina hendrix-ssh.cps.unizar.es. La fecha límite de entrega es el día anterior al de la sexta sesión de prácticas en el laboratorio a las 23:59. 4. Procedimiento de corrección y recomendaciones Una vez realizadas la práctica y entregada esta, cada grupo debe presentarsela al profesorado de prácticas. Al realizar la presentación el profesorado le formulará cuestiones sobre las decisiones de diseño e implementación que ha realizado. La práctica debe entregarse en los términos indicados anteriormente, funcionar correctamente en cualquier ordenador con Java 1.7 y no haber sido copiada. En particular, hay que asegurarse de que la práctica funciona correctamente en los ordenadores del laboratorio (vigilar aspectos como los permisos de ejecución de los scripts, juego de caracteres utilizado en los ficheros, etc.). También es importante someter código limpio (donde se ha evitado introducir mensajes de depuración y comentarios que no proporcionan información al usuario). Se considerarán los siguientes aspectos 1. La estructura (clases estructuradas adecuadamente en paquetes, métodos, visibilidad atributos y métodos, etc.). 2. El estilo de la interfaz de usuario de las aplicaciones construidas. 3. La documentación y sangrado de los ficheros fuentes. 5