#+TITLE: Práctica final #+SUBTITLE: Recuperación de Información #+AUTHOR: Amin Kasrou Aouam #+DATE: 2021-01-11 #+PANDOC_OPTIONS: template:~/.pandoc/templates/eisvogel.latex #+PANDOC_OPTIONS: listings:t #+PANDOC_OPTIONS: toc:t #+PANDOC_METADATA: lang=es #+PANDOC_METADATA: titlepage:t #+PANDOC_METADATA: listings-no-page-break:t #+PANDOC_METADATA: toc-own-page:t #+PANDOC_METADATA: table-use-row-colors:t #+PANDOC_METADATA: logo:/home/coolneng/Photos/Logos/UGR.png * Práctica final En esta práctica, vamos a implementar un buscar de información en una serie de documentos /JSON/ usando /Apache Lucene/. ** /Parsing/ Parseamos los documentos /JSON/ mediante la librería /GSON/, dado que ésta nos ofrece la posibilidad de serializar el documento en una clase Java. Esta funcionalidad nos facilita la extracción de información en /JSON/ complejos. Para ellos, creamos la clase *Paper*: #+begin_src java package org.RI.P2; import java.util.List; import com.google.gson.annotations.SerializedName; class Affiliation { String laboratory; String institution; } class Author { String first; List middle; String last; String suffix; Affiliation affiliation; String email; } class Metadata { String title; List authors; } class Abstract { String text; } public class Paper { String paper_id; Metadata metadata; @SerializedName("abstract") List abstr; } #+end_src Es esencial utilizar el mismo nombre de atributo en nuestra clase, dado que esto permitirá un /mapping/ correcto. En caso de que no fuera posible, podemos hacer uso del decorador *@SerializedName*. El único paso que nos falta es indicarle a la librería la entrada (/JSON/) y la clase. #+begin_src java Gson gson = new Gson(); Paper data = gson.fromJson(readerJson, Paper.class); #+end_src ** Indexación Para la indexación, hemos elegido los siguientes atributos: - =paper_id= - title - authors - institution - emails - abstract Optamos por crear un índice en cada ejecución, para evitar obtener valores repetidos. ** Buscador Implementamos un buscador con interfaz gráfica (GUI), basada en el proyecto de ejemplo disponible en la plataforma Prado. Podemos optar por buscar en diferentes campos, mediante un argumento pasado por línea de comandos. Especificamos las distintas opciones en la sección siguiente. ** Ejecución En el caso que deseemos utilizar /Maven/, debemos ejecutar los siguientes comandos: 1. Compilar el proyecto #+BEGIN_SRC shell mvn compile #+END_SRC 2. Ejecutar el proyecto #+BEGIN_SRC shell mvn exec:java -Dexec.mainClass="org.RI.P2.Searcher" -Dexec.args="data title" #+END_SRC Debemos modificar el argumento *title* según la salida que deseemos: - *title* - *authors* - *abstract* - *institutions* - *emails*