Artículo original: How to Extract Data from PDF Files with Python

Los datos están presentes en todas las áreas del mundo digital moderno, y toma diferente formas.

Uno de los formatos más comunes es PDF. Facturas, reportes y otras formas frecuentemente almacenados en archivo Formato de Documento Portátil (PDF) por organizaciones e instituciones.

Puede ser laborioso y lleva mucho tiempo extraer datos archivos PDF. Afortunadamente, para fácil extracción de datos de archivos PDF, Python brinda una variedad de librerías.

Este tutorial explicará como extraer datos de archivos PDF usando Python. Aprenderás a instalar las librerías necesarias y te proporcionaré ejemplos de como hacerlo.

Hay muchas librerías de Python que puedes usar para leer y extraer texto de archivos PDF. Estos incluyen PDFMiner, PyPDF2, PDFQuery y PyMuPDF. Aquí, usaremos PDFQuery para leer y extraer datos de múltiples archivos PDF.

Cómo usar PDFQuery

PDFQuery es una biblioteca de Python que proporciona una manera fácil de extraer datos de archivos PDF mediante el uso de selectores similares a CSS para ubicar elementos en el documento.

Lee un archivo PDF como un objeto, convierte el objeto PDF a un archivo XML, y accede a la información deseada por su ubicación especifica dentro del documento PDF.

Consideremos un ejemplo corto para ver como funciona.

from pdfquery import PDFQuery

pdf = PDFQuery('example.pdf')
pdf.load()

# Use CSS-like selectors to locate the elements
text_elements = pdf.pq('LTTextLineHorizontal')

# Extract the text from the elements
text = [t.text for t in text_elements]

print(text)

En este código, primero creamos un objeto PDFQuery pasando el nombre del archivo del documento PDF al cual queremos extraer el texto. Luego cargamos el documento en el objeto llamando al método load().

A continuación, utilizamos selectores similares a CSS para localizar los elementos de texto en el documento PDF. El método pq() es usado para localizar los elementos, el cual regresa un objeto PyQuery que representa los elementos seleccionados.

Por último, extraemos el texto de los elementos accediendo al atributo text de cada elemento y almacenamos el texto extraído en una lista llamada texto.

Consideremos otro método que podemos usar para leer archivos PDF, extraer algunos elementos de los datos y crear un set de datos estructurados usando PDFQuery. Seguiremos los siguientes pasos:

  • Instalación del paquete.
  • Importar las librerías.
  • Leer y convertir archivos PDF.
  • Acceder y extraer los datos.

Instalación del Paquete

Primero, necesitamos instalar PDFQuery y también Pandas para un poco de análisis y presentación de datos.

pip install pdfquery
pip install pandas

Importar las librerías

import pandas as pd
import pdfquery

Importamos dos librerías para poder usarlas en nuestro proyecto.

Leer y convertir los archivos PDF

#read the PDF
pdf = pdfquery.PDFQuery('customers.pdf')
pdf.load()


#convert the pdf to XML
pdf.tree.write('customers.xml', pretty_print = True)
pdf

Leeremos el archivo PDF en nuestro proyecto como un objeto de elemento y lo cargamos. Convertir el objeto pdf en un archivo de Lenguage de Marcado Extensible (XML). Este archivo contiene los datos y los metadatos del archivo PDF anteriormente brindado.

El XML define un grupo de reglas para codificar archivos PDF en un formato que es leíble por humanos y máquinas. Mirando al archivo XML usando un editor de texto, podemos ver dónde están los datos que queremos extraer.

Acceder y extraer los Datos

Podemos obtener la información que estamos tratando de extraer dentro de LTTextBoxHorizontal, y podemos ver la metadata asociada con el archivo.

Los valores adentro de la caja de texto, [68.0, 231.57, 101.990, 234.893] en el fragmento de XML hace referencia a las coordenadas Izquierda, Fondo, Derecha, Arriba de la caja de texto. Puedes pensar  en esto como los límites alrededor de los datos que queremos extraer.

Accedamos y extraigamos el nombre del cliente usando las coordenadas de la caja de texto:

# access the data using coordinates
customer_name = pdf.pq('LTTextLineHorizontal:in_bbox("68.0, 231.57, 101.990, 234.893")').text()

print(customer_name)

#output: Brandon James

Y eso es todo, ¡hemos terminado!

Nota: a veces el dato que queremos extraer no está exactamente en la misma ubicación en cada archivo, podemos causar problemas. Afortunadamente, PDFQuery también puede consultar etiquetas que contengan una cadena determinada.

Conclusión

La extracción de datos de archivos PDF es una tarea crucial porque estos archivos se utilizan con frecuencia para el almacenamiento y el uso compartido de documentos.

La librería PDFQuery de Python es una herramienta potente para extraer datos de archivos PDF. Cualquier persona buscando extraer datos de archivos PDF encontrará PDFQuery  una gran opción gracias a su fácil sintaxis y documentación comprensible. Es también código abierto y puede ser modificado para adaptarse a casos de uso específicos.

Conectémonos en Twitter y en LinkedIn. También puedes suscribirte a mí canal de YouTube.

¡Feliz codificación!