RI-P2/docs/Summary.org

113 lines
2.7 KiB
Org Mode

#+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<String> middle;
String last;
String suffix;
Affiliation affiliation;
String email;
}
class Metadata {
String title;
List<Author> authors;
}
class Abstract {
String text;
}
public class Paper {
String paper_id;
Metadata metadata;
@SerializedName("abstract") List<Abstract> 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*