diff --git a/docs/Summary.org b/docs/Summary.org new file mode 100644 index 0000000..e6ad386 --- /dev/null +++ b/docs/Summary.org @@ -0,0 +1,112 @@ +#+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* + diff --git a/docs/Summary.pdf b/docs/Summary.pdf new file mode 100644 index 0000000..d4b59f0 Binary files /dev/null and b/docs/Summary.pdf differ