Como desarrolladores de Python, a menudo nos encontramos con situaciones en las que necesitamos extraer datos de varias fuentes y formatos como PDF, CSV, HTML y más. En este artículo, analizaremos en profundidad el análisis sintáctico de datos de archivos PDF e introduciremos algunos paquetes de Python útiles para analizar otros formatos de datos.
Analizar archivos PDF en Python
PDF es un formato de archivo estándar muy utilizado para compartir e imprimir documentos. Desgraciadamente, no es el formato más fácil a la hora de extraer datos, debido a su compleja estructura. Afortunadamente, Python proporciona varias bibliotecas que pueden ayudarnos a extraer datos de archivos PDF, como PyPDF2 y PDFMiner.
PyPDF2
PyPDF2 es una biblioteca Python pura desarrollada como un conjunto de herramientas PDF. Es capaz de extraer información del documento, dividir documentos página por página, combinar páginas, recortar páginas y cifrar y descifrar archivos PDF.
He aquí un sencillo ejemplo de uso de PyPDF2 para extraer texto de un archivo PDF:
import PyPDF2
def extract_text_from_pdf(file_path):
pdf_file_obj = open(file_path, 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file_obj)
text = ""
for page_num in range(pdf_reader.numPages):
page_obj = pdf_reader.getPage(page_num)
text += page_obj.extractText()
pdf_file_obj.close()
return text
print(extract_text_from_pdf('example.pdf'))
# Encontrará más información en nuestro PyPDF2 Post.
PDFMiner
Aunque PyPDF2 es una gran herramienta para tareas básicas de procesamiento de PDF, no siempre hace un buen trabajo extrayendo texto que conserve su diseño original. Aquí es donde entra PDFMiner. Se centra en recuperar y analizar datos de texto de archivos PDF.
He aquí un ejemplo sencillo de cómo utilizar PDFMiner para extraer texto:
from pdfminer.high_level import extract_text
def extract_text_from_pdf(file_path):
text = extract_text(file_path)
return text
print(extract_text_from_pdf('example.pdf'))PDFQuery
PDFQuery es una biblioteca ligera de Python que utiliza una combinación de sintaxis XML y jQuery para analizar archivos PDF. Resulta especialmente útil si conoce la ubicación exacta de los datos de un archivo PDF que desea extraer.
import pdfquery
def extract_data_from_pdf(file_path):
pdf = pdfquery.PDFQuery(file_path)
pdf.load()
label = pdf.pq('LTTextLineHorizontal:contains("Your Label")')
return label
data = extract_data_from_pdf('Beispiel.pdf')
print(data)
Tabula-py
Si sus PDFs consisten en tablas, Tabula-py es la librería ideal para la extracción. Es una envoltura simple para Tabula que le permite leer tablas en un PDF en objetos DataFrame.
import tabula
def extract_table_from_pdf(file_path):
df = tabula.read_pdf(file_path, pages='all')
return df
df = extract_table_from_pdf('Beispiel.pdf')
print(df)
PDFBox
PDFBox es una biblioteca Java útil para tareas relacionadas con PDF que también proporciona un envoltorio en Python, python-pdfbox. Aunque la funcionalidad es algo limitada en comparación con la biblioteca Java original, puede extraer texto, metadatos e imágenes.
import pdfbox
def extract_text_from_pdf(file_path):
p = pdfbox.PDFBox()
text = p.extract_text(file_path)
return text
text = extract_text_from_pdf('Beispiel.pdf')
print(text)
Pizarra
Slate se basa en PDFMiner para proporcionar una API más sencilla para la extracción de texto de archivos PDF. Sin embargo, no se ha mantenido durante varios años, por lo que es posible que no funcione de forma óptima con las versiones más recientes de Python.
import slate
with open('Beispiel.pdf', 'rb') as f:
document = slate.PDF(f)
text = " ".join(document)
print(text)
PDFPlumber
Esta biblioteca ofrece amplias funciones para extraer texto, tablas e incluso elementos visuales de los PDF. Se basa en PDFMiner y ofrece una API más fácil de usar.
import pdfplumber
def extract_text_from_pdf(file_path):
with pdfplumber.open(file_path) as pdf:
first_page = pdf.pages[0]
text = first_page.extract_text()
return text
print(extract_text_from_pdf('Beispiel.pdf'))
Cada una de estas bibliotecas tiene sus propios puntos fuertes y débiles, y la mejor elección depende de los detalles de la tarea a realizar. Evalúe cuidadosamente sus necesidades y los archivos PDF con los que trabaja a la hora de elegir una biblioteca.
Konfuzio SDK
Konfuzio es un sofisticado kit de desarrollo de software (SDK) que ayuda a analizar datos de documentos complejos y no estructurados, incluidos los PDF. La fuerza de Konfuzio reside en su capacidad de utilizar el aprendizaje automático para extraer información. No es sólo un extractor de texto, sino que es capaz de entender el contexto y las relaciones de su documento.
Haga clic aquí para Tutoriales PDF con el SDK de Python por Konfuzio.
Otros analizadores de datos en Python
Más allá de los PDF, Python ofrece una gran cantidad de bibliotecas para analizar diversos formatos de datos. He aquí algunos ejemplos.
Análisis sintáctico de CSV: pandas
La biblioteca pandas es una potente herramienta para la manipulación de datos que también simplifica el análisis sintáctico de archivos CSV:
import pandas as pd
def parse_csv(file_path):
df = pd.read_csv(file_path)
return df
df = parse_csv('example.csv')
print(df.head())
Este script lee un fichero CSV en un DataFrame de pandas, que es una estructura de datos bidimensional etiquetada con posibles tipos de columnas diferentes.
Análisis sintáctico de HTML: Beautiful Soup
Beautiful Soup es una biblioteca de Python que se utiliza para extraer datos de archivos HTML y XML.
from bs4 import BeautifulSoup
import requests
def parse_html(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
return soup
soup = parse_html('https://www.example.com')
print(soup.prettify())
Este script obtiene el contenido HTML de una página web y lo convierte en un objeto BeautifulSoup que puede examinar para extraer datos.
Análisis JSON: json
La biblioteca estándar de Python contiene el módulo json, que permite codificar y analizar datos JSON.
import json
def parse_json(json_string):
data = json.loads(json_string)
return data
data = parse_json('{"key": "value"}')
print(data)
Este script analiza una cadena JSON y la convierte en un diccionario Python.
Conclusión
En este artículo sólo hemos arañado la superficie del análisis sintáctico de datos en Python. Dependiendo de tus necesidades específicas y de la complejidad de tus datos, puede que necesites considerar otras bibliotecas y herramientas. Sin embargo, los paquetes y ejemplos que se ofrecen aquí deberían ofrecerte un buen punto de partida para las tareas más comunes de análisis sintáctico de datos.
