113 lines
2.7 KiB
Org Mode
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*
|
|
|