Cómo extraer datos de tablas en PDF con Tabula y OpenRefine
() translation by (you can also view the original English article)
Hay toneladas de datos ahí fuera, guardados en tablas incrustadas en ensayos e informes en PDF. Los archivos PDF son omnipresentes, pero es más difícil utilizar los datos que contienen en su interior que en una hoja de cálculo. Incluso si puedes extraer los datos, puede ser difícil obtener resultados consistentes. Una tabla podría tener líneas para señalar los límites de la celda, mientras que otras solo podrían tener espacios en blanco para lograr una vista de tabla. También pueden variar en términos de contener filas y/o columnas que abarcan y, a menudo, la única constante es que todos tienen datos que deseas extraer.
Si bien puedes extraer datos manualmente de una tabla en un PDF, no es nada sencillo. No hay razón para tomarse tanto tiempo cuando existen herramientas para simplificar nuestro trabajo. En este tutorial, te mostraré cómo extraer una tabla del PDF fácilmente con Tabula y luego limpiar los datos desordenados a una forma más utilizable con OpenRefine.
¿Por qué Tabula?
Todos los que trabajan con datos conocen un problema común: encontraste algunos datos interesantes para tu proyecto periodístico o estadísticas para preparar un buen mapa, pero los datos vienen desordenados y atrapados dentro de un archivo PDF, que tu programa no puede leer automáticamente. Por lo tanto, debes escribir o realizar un largo proceso de copiar y pegar filas de datos del archivo PDF en Excel. Este tipo de trabajo manual crea fricciones y, en consecuencia, se pierde mucho tiempo.
Siendo un graduado de investigación, he pasado por el dolor de copiar y pegar manualmente la tabla para mi tesis. Siempre soñé con una aplicación que pueda extraer la tabla de un PDF con un solo clic, y eso es exactamente lo que hace Tabula. Es una aplicación gratuita con tecnología Java que se ejecuta en una interfaz web en tu computadora y puede extraer datos de casi cualquier tabla en un PDF. En segundos, puedes extraer los datos que te llevaría horas volver a escribir a mano.
¿Cómo usar Tabula?
En primer lugar, descarga el archivo zip correspondiente para tu computadora desde el sitio web de Tabula y descomprímelo en una carpeta de tu elección. Asegúrate de tener instalado Java v6 o 7 también; de lo contrario, puedes descargarlo de forma gratuita desde el sitio web de Oracle. Ese enlace es a la versión sin publicidad/barra de herramientas, por lo que no tendrás que preocuparte por la instalación de nada más.
Cuando inicies Tabula, inicialmente verás una ventana de Comandos y en unos segundos tu navegador debería abrirse automáticamente en http://127.0.0.1:8080
. Si no es así, abre tu navegador web y escribe esta URL en el campo de la dirección. Envía tu archivo PDF y Tabula procesará tu archivo y te mostrará una buena lista de miniaturas de página. Busca la tabla que deseas extraer, o si tienes un PDF pequeño, puedes marcar la opción "Detectar tablas automáticamente".



Haz clic y arrastra para seleccionar el área de la tabla. Una vez que sueltes el cursor, Tabula te mostrará la tabla extraída en un formato amigable. Si los datos son confusos, intenta eliminar los encabezados o las notas del pie de página y más. Por último, puedes descargar la tabla extraída como valores separados por comas (CSV) o valores separados por tabulaciones (TSV) o copiar los datos en el portapapeles. Una vez que los datos están en la hoja de cálculo, es posible que debas editar un poco, como corregir los encabezados o las notas al pie de página.



Cuando necesites cerrar Tabula en Windows, ve a la ventana de Comandos y presiona Control-C. Espera hasta que haya un mensaje que diga que el apagado se completó. Esa ventana podría cerrarse automáticamente o cerrarla tú mismo. En Mac, cambia a la aplicación (haz clic con el botón derecho en el icono del dock) y presiona CMD-Q. Si estás ejecutando Mac OS X 10.8 o posterior, asegúrate de ajustar la configuración de Gatekeeper para evitar mensajes de error durante la instalación.
Tabula no será perfecta todo el tiempo y todavía quedan algunos problemas por resolver. A partir de ahora, solo funciona en PDF basado en texto, por lo que tienes que trabajar manualmente si has escaneado archivos PDF, aunque si tienes una copia de Acrobat, es posible que puedas convertir archivos PDF de imágenes en un PDF editable para trabajar con Tabula. Además, si tienes archivos PDF con filas de varias líneas, Tabula informará errores frecuentes en tablas sin separadores de filas gráficas, así que asegúrate de tener cuidado con eso.
¿Por qué OpenRefine?
Los errores ortográficos ocasionales, el espacio adicional, la puntuación aleatoria, las mayúsculas extrañas, el registro duplicado y más son parte del curso cuando extraes datos de archivos PDF. No importa qué tan agradable se vea el extracto a primera vista, tus datos serán un desastre si hay algún error, creando problemas en la recuperación de datos, la interoperabilidad y la indexación.
Ahí es donde entra OpenRefine (antes Google Refine). Es otra herramienta gratuita que te ayuda a identificar fácilmente estos errores e inexactitudes de datos. OpenRefine no solo te permite diagnosticar rápidamente la precisión de tus datos, sino que también actúa sobre ciertos errores de manera automatizada. Esto puede transformar datos en muchas celdas existentes de forma masiva, con el fin de limpiar los datos, puede ampliarlos con más datos de otras fuentes y convertirlos a otros formatos para que puedas usarlos en las aplicaciones que desees.
¿Cómo utilizar OpenRefine?
OpenRefine una vez más tiene una interfaz web, se ejecuta en tu computadora y requiere Java. La única diferencia es que esta vez se abrirá en tu navegador en http://127.0.0.1:3333
.
Cuando abres OpenRefine, puedes notar tres opciones en el lado izquierdo: Crear proyecto hace que puedas importar datos desde una computadora, una dirección web, un portapapeles o una hoja de cálculo de Google; Proyecto abierto, te ayuda a volver a un proyecto existente creado durante una sesión anterior; e Importar proyecto nos permite importar directamente un archivo de un proyecto de OpenRefine existente. OpenRefine comprende una variedad de formatos de archivos de datos, incluidos TSV, CSV, documentos de Excel e incluso XML y JSON, uno de los favoritos para desarrolladores web y de aplicaciones.



Busca tu archivo CSV exportado y haz clic en Siguiente. En la siguiente pantalla, obtienes una descripción general de tu conjunto de datos tal como aparecerá en OpenRefine. De forma predeterminada, la primera línea se analizará correctamente como el nombre de una columna. Otra opción es la casilla de verificación “Las comillas se utilizan para encerrar celdas que contienen separadores de columna”. Si lo dejas seleccionado, asegúrate de verificar que todos los valores de celda estén entre comillas en el archivo original. De lo contrario, anula la selección de esta casilla para asegurarte de que OpenRefine no malinterprete las comillas.
Las otras opciones pueden resultar útiles en algunos casos; intenta seleccionarlos y deseleccionarlos para ver cómo afectan tus datos. Observa cómo se actualiza la vista previa para reflejar estos cambios. Además, asegúrate de seleccionar la codificación correcta para evitar que se confundan caracteres especiales. Cuando todo parezca correcto, asigna un nombre a tu proyecto y haz clic en Crear proyecto.



Para demostrar las diversas técnicas de manipulación de datos, puedes usar tu propio conjunto de datos o descargar un conjunto de datos de pruebas del repositorio de Github para probarlo tú mismo. Una vez que tu conjunto de datos se haya cargado en OpenRefine, debes aprender a explorar datos escaneando las diferentes zonas. De arriba a abajo se pueden observar cuatro zonas.
En la primera zona, puedes ver el número total de filas de un archivo en particular. En la segunda zona, puedes intentar alternar entre filas y registros haciendo clic en cualquier palabra. Esta zona también te permitirá elegir si deseas mostrar 5, 10 o 50 filas/registros en una página, y también proporciona la forma correcta de navegar de una página a otra. En la tercera zona, encontrarás aquí la primera fila que se analizó como encabezado de columna cuando se creó el proyecto. En mi conjunto de datos, las columnas dicen university, endowment, numFaculty, etc. La columna de la izquierda siempre llama a Todo y se divide en tres subcolumnas que contienen estrellas, banderas e ID. Cada columna tiene un menú al que se puede acceder haciendo clic en el pequeño triángulo desplegable. Finalmente, la cuarta zona muestra el área principal real mostrando los valores reales de las celdas. Si pasas el cursor sobre una celda, puedes editar ese tipo de dato en particular.



Las columnas son una parte esencial de OpenRefine y, de forma predeterminada, todas las columnas se expanden, lo que puede resultar engorroso si hay muchas columnas en el proyecto. Si deseas ocultar temporalmente una columna más para facilitar el trabajo en las demás, haz clic en el pequeño triángulo desplegable en cualquier columna para mostrar el menú y selecciona Ver. Puedes ver cuatro opciones aquí: Contraer esta columna, Contraer todas las demás columnas, Contraer columnas a la izquierda y Contraer columnas a la derecha.
Juega con las opciones de las columnas individuales hasta que estés satisfecho con el resultado. Para expandir una columna nuevamente, simplemente haz clic en ella. En algunos casos, puede resultar útil cambiar el orden de las columnas, por ejemplo, para reunir las columnas que se deben comparar. Para lograr esto, ingresa al menú de cualquier columna y haz clic en Editar columna. Nuevamente, hay cuatro opciones disponibles: Mover columna al principio, Mover columna al final, Mover columna a la izquierda y Mover columna a la derecha. Si deseas reordenar las columnas por completo, usa la columna llamada Todos.
La opción Ver aquí te ofrece una forma rápida de expandir o contraer todas las columnas, mientras que Editar columna te ofrece una forma rápida de reorganizar las columnas arrastrándolas o suprimiéndolas soltándolas a la derecha, como se muestra en la siguiente captura de pantalla.



Cuando tu proyecto es grande, lo primero que debes aprender es cómo ordenar los datos con la ayuda visual, ya que la ordenación puede hacer que tu conjunto de datos sea más fácil de explorar y manipular. Para ordenar tus datos por nombres de universidades, elige Ordenar en el menú de columnas para acceder a la siguiente pantalla. Al mirar la captura de pantalla, puedes ordenar los valores de las celdas de acuerdo con su tipo: texto, números, fechas y valores booleanos, y para cada tipo se pueden ordenar en un orden diferente.
Por ejemplo, el texto se puede ordenar alfabéticamente (de la 'a' a la 'z') o en orden alfabético inverso (de la 'z' a la 'a'), booleanos como falso y luego verdadero o viceversa, etc. Además, podemos especificar dónde se almacenarán los errores y los espacios en blanco en relación con los valores válidos arrastrándolos en el orden deseado. Por ejemplo, los errores pueden ordenarse primero para detectarlos más fácilmente, seguidos de valores válidos en el medio y valores en blanco al final.



Una de las herramientas de OpenRefine que utilizarás con más frecuencia es la creación de facetas. Normalmente, creas una faceta en una columna en particular. La faceta resume las celdas en esa columna para brindarte una imagen general de tus datos en la barra lateral y, al mismo tiempo, te permite filtrar datos en algún subconjunto de filas que deseas cambiar de forma masiva. Hay varias formas de facetar datos y, según los valores del conjunto de datos y tus necesidades, son: facetas de texto para cadenas, facetas numéricas para números y fechas y facetas personalizadas para definir tu propio texto y facetas numéricas.
La faceta de texto es una herramienta muy útil, similar a filtrar en una hoja de cálculo. La faceta de texto agrupa valores de texto únicos en grupos. Esto puede ayudarnos a fusionar información y podemos ver valores, que podrían escribirse de muchas formas diferentes. Ahora, crearemos una faceta de texto en la columna country haciendo clic en el menú desplegable de esa columna y seleccionando Faceta → Faceta de texto.
El resultado de esta faceta aparece en la pestaña Faceta/Filtrar a la izquierda de la pantalla. En la siguiente captura de pantalla podemos ver la columna country agrupada según los nombres, pero encontré algunas entradas extrañas como "U.S", "Estados Unidos" y "U.S.A", junto con algunos "Estados Unidos". ¿No son todos iguales?

Puedes editar manualmente estas discrepancias, pero no es necesario. La opción Agrupar te ayudará a encontrar fácilmente este tipo de datos sucios y corregirlos. Haz clic en el menú desplegable de la columna country y navega hasta Editar celdas → Agrupar y editar, OpenRefine te presentará un cuadro de diálogo donde puedes elegir diferentes métodos de agrupación, cada uno de los cuales puede usar varias funciones de codificación.
En valores en clúster - agrupación, puedes ver las diferentes ortografías y cuántas filas contienen una ortografía en particular. ¿Se puede combinar? La columna contiene una casilla de verificación y, si la marcas, todos los valores de ese grupo se cambiarán al valor de la columna Nuevo valor de celda. Aquí puedo ingresar manualmente el nuevo valor de celda como "Estados Unidos de América" y luego puedes hacer clic en el botón Combinar seleccionados y cerrar para combinar todos los grupos seleccionados.
Puedes encontrar más discrepancias en el conjunto de datos; si es así, selecciona un método diferente en el menú desplegable y elige diferentes funciones de codificación. Juega con diferentes opciones hasta que arregles todas las inconsistencias. Si deseas profundizar en cómo funciona la agrupación en clústeres de OpenRefine, asegúrate de consultar este artículo en su Github.



Cuando una faceta de texto agrupa valores de texto únicos en grupos, una faceta numérica agrupa los números en contenedores de rango numérico. Necesitamos limpiar los datos del número de estudiante en la columna numStudents. No todos los valores son numéricos y muchos de ellos pueden contener fragmentos de texto además del número real de estudiantes. Para averiguar qué entradas deben corregirse, usaré una faceta numérica.
En el menú de la columna numEstudiantes, ve a Faceta → Faceta numérica y observa lo que aparece en la pestaña Faceta/Filtro a la izquierda. Esto nos muestra un histograma de los valores y, además, enumera el número de entradas por tipo (numérico, no numérico, en blanco, error), vigila las filas no numéricas y desmarca los otros tipos. Ya podemos ver algunos problemas, ya que algunas celdas tienen "texto además de números" y varias otras discrepancias. Entonces, la columna numérica en resumen no es puramente numérica y contiene algunos datos sucios.
Podemos hacer dos cosas aquí: usar la faceta de texto para enumerar todo el "texto además de los números" en la barra lateral izquierda, luego pasar el cursor sobre cualquier dato desordenado y ver una opción llamada editar, se abrirá un cuadro de diálogo y luego eliminar el texto con retroceso y hacer clic en Aplicar. En mi conjunto de datos, eliminé el texto "Great Valley" de 560 filas con un solo clic.



Las facetas son definitivamente herramientas poderosas, pero a veces puedes ver inconsistencias en la columna de la celda y la única forma de editar celdas en una columna es invocando el comando Transformación común en esa columna; en el menú desplegable de la columna, selecciona Editar celdas → Comando de transformación común. Verás que aquí hay una variedad de funciones útiles para limpiar tus datos y asegurarte de que sean consistentes. Este es el motivo: a veces, en el proceso de ingresar datos, las personas colocan un espacio antes o después de un nombre. No podrás verlo, pero cuando se trata de combinar dos conjuntos de datos, el software de hoja de cálculo lo interpretará como dos conjuntos de datos. Por ejemplo, " Rahul" es diferente de "Rahul".
Ve a la columna donde deseas eliminar los espacios en blanco, luego navega a Editar celdas → Transformación común → Recortar los espacios en blanco iniciales y finales. Otro problema común con los datos es el formato incoherente: en ocasiones, alguien dejará el bloqueo de mayúsculas o se olvidará de escribir un nombre en mayúscula. Estas tres opciones: poner el título, convertirlas en mayúsculas o en minúsculas convierte todas las celdas de esa columna para que tengan un formato coherente, de una forma u otra.



Una característica muy útil de OpenRefine es su manejo del historial de todas las modificaciones que afectaron los datos desde la creación del proyecto. En la práctica, esto significa que nunca debes tener miedo de probar cosas con el conjunto de datos. Siéntete libre en todo momento de jugar con tus datos y aplicar cualquier número de facetas o transformación porque siempre puedes deshacerlo si te das cuenta de que fue un error.
Para acceder al historial del proyecto, haz clic en la pestaña Deshacer/Rehacer en la parte superior izquierda de la pantalla, justo al lado del Filtro/Faceta, como se muestra en la captura de pantalla. Para retroceder el reloj, haz clic en el último paso que deseas mantener y el descanso se atenuará. Para cancelar todos los cambios y recuperar los datos como estaban antes de realizar cualquier transformación, haz clic en 0. Crear proyecto. Para rehacer, haz clic en el paso hasta el que deseas restaurar el historial.

Una vez que hayas terminado tu proyecto, puedes exportar los datos de un proyecto OpenRefine existente. El menú Exportar en la parte superior derecha de la pantalla te permite hacer precisamente eso. Los formatos admitidos son: TSV, CSV, formato Excel, hoja de cálculo ODF, JSON y tabla HTML. La última opción es útil si deseas publicar tus datos limpios en línea.
Conclusión
Con este tutorial, obtendrás los conceptos básicos de cómo usar Tabula y OpenRefine. En algún momento, es posible que te sientas abrumado por la complejidad de OpenRefine, pero no te preocupes. Tómate tu tiempo y recuerda que trabajar con datos no es solo código o clics, debes seguir tu intuición para obtener datos en excelente forma, y siempre puedes deshacer cualquier cosa si cometes un error.
Si tienes algún problema para comenzar con Tabula u OpenRefine, o tienes algún método único que deseas compartir, asegúrate de informarnos en los comentarios a continuación.