RI-P2/docs/Summary.org

2.7 KiB

Práctica final

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:

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;
}

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.

Gson gson = new Gson();
Paper data = gson.fromJson(readerJson, Paper.class);

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
mvn compile
  1. Ejecutar el proyecto
mvn exec:java -Dexec.mainClass="org.RI.P2.Searcher" -Dexec.args="data title"

Debemos modificar el argumento title según la salida que deseemos:

  • title
  • authors
  • abstract
  • institutions
  • emails