3.8 KiB
Práctica 1
Práctica 1
En esta práctica, vamos a obtener información de una serie de documentos usando Apache Tika:
- Obtener los metadatos (nombre , tipo, codificación e idioma)
- Extraer todos los enlaces que aparecen
- Generar un fichero con las ocurrencias de cada término, ordenados de forma descendente
- Generar una gráfica con los términos y su ocurrencia
Instalación
Implementamos la práctica usando Java como lenguaje de programación, y Maven como herramienta de gestión del proyecto. No es necesario utilizar esta herramienta, pero nos ofrece una mayor reproducibilidad del proyecto.
En el caso de que deseemos instalar fácilmente todas las dependencias, podemos instalar el gestor de paquetes Nix (compatible con Linux, MacOS y WSL)
Usando Nix
- Instalamos Nix:
sh <(curl -L https://nixos.org/nix/install) --daemon
- Cambiamos la ruta al directorio del proyecto:
cd P1
- Entramos en el entorno de desarrollo reproducible y aislado:
nix-shell
Nix se encargará de resolver las dependencias, podemos dirigirnos directamente a la sección de ejecución.
Sin Nix
En el caso de que no deseemos usar Nix, deberemos instalar las siguientes dependencias en nuestro sistema:
\clearpage
- OpenJDK (> 8.0)
- Maven
- Gnuplot
Ejecución
En el caso que deseemos utilizar Maven, debemos ejecutar los siguientes comandos:
- Compilar el proyecto
mvn compile
- Ejecutar el proyecto
mvn exec:java -Dexec.mainClass="org.RI.P1.AnalyzeDirectory" -Dexec.args="data metadata"
Debemos modificar el argumento metadata según la salida que deseemos:
- metadata: obtenemos la información de los archivos (nombre, codificación, tipo)
- links: obtenemos la lista de enlaces de cada archivo
- frequency: se guarda la frecuencia de las palabras de cada documento en un archivo (se encuentran en la carpeta output).
Implementación
Tal y como podemos observar en la sección previa de ejecución, hemos optado por añadir un argumento para elegir la acción que deseamos realizar. En caso de que se omita éste, las instrucciones de ejecución aparecen por pantalla.
private static void usage() {
System.out.println("Usage: AnalyzeDirectory <directory> <option>");
System.out.println("option metadata: shows the filename/file type/encoding and language of the files");
System.out.println("option links: shows all the links contained in each file");
System.out.println("option frequency: saves word frequency to a file");
System.exit(1);
}
public static void main(String[] args) throws IOException, TikaException, SAXException {
if (args.length != 2) {
usage();
}
String directory = args[0];
String action = args[1];
readFiles(directory);
chooseAction(action);
}
Esta funcionalidad permite al usuario seleccionar la salida que desea, además de disminuir el contenido que aparece por pantalla y el tiempo de ejecución (dado que no computamos acciones innecesarias).
En el caso de la opción frequency, guardamos las ocurrencias de los términos en un fichero en el directorio output con el formato filename.dat. Utilizaremos estos archivos para generar las gráficas.