Algunos casos de uso en los que se requiera extraer texto de archivos pdf pueden ser:
- ejecutar análisis de curriculums vitae (hojas de vida)
- para permitir la búsqueda por contenidos en un archivo
- obtención de los datos de contacto de empresas desde boletas o facturas de pago
- conversión a un formato más amigable para su presentación en la web (html) entre otros
A continuación, 3 herramientas que se pueden utilizar para extraer texto de archivos PDF:
1. PDFMiner (python):
Enlace: pdfminer-six
** Instalación **:
pip install pdfminer.six
** Uso **:
pdf2txt.py archivo.pdf
** Características resaltantes **:
- permite escoger el formato de salida: txt, xml, html
- selección del rango de páginas a escanear
2. Apache Tika (java):
Apache tika es una herramienta que extrae metadatos y texto desde varios formatos como: doc, ppt, xls, pdf entre otros
** Enlace **: apache-tika
** Instalación y uso **:
Se requiere contar con java instalado, descargar tika y ejecutarlo de forma similar a:
java -jar tika-server.jar
** Características **
- reconoce múltiples formatos de entrada
- permite escoger el formato de salida: txt, xml, html
- extracción de metadata: cantidad de páginas, versión de pdf, extensión del documento, número de páginas entre otros.
- cuenta con una herramienta gráfica: tika-app.jar que se puede utilizar para realizar pruebas de forma rápida
- existe un wrapper para utilizarlo con python: tika-python
3. pdftotxt (linux)
Herramienta para extraer pdf incluida por defecto en varias distribuciones linux.
** Documentación **: pdftotext
** Uso **
pdftotext documento.pdf
Con lo anterior, se crea el archivo: documento.txt
** Características **
- selección del rango de páginas a escanear
- es la más sencilla de utilizar ya que viene preinstalada
Extraer texto con Python y una API
Las tres herramientas anteriores siguen funcionando, pero para integrarlo en una aplicación conviene usar una librería o una API. Estas son las opciones que recomiendo hoy:
pypdf (Python)
pypdf es la evolución de PyPDF2 y funciona bien con PDFs que ya tienen una capa de texto:
::python
from pypdf import PdfReader
reader = PdfReader("documento.pdf")
texto = "\n".join(page.extract_text() or "" for page in reader.pages)
print(texto)
Instalación: pip install pypdf.
pdfminer.six (Python)
pdfminer.six da más control sobre la extracción y suele manejar mejor PDFs con tablas o columnas:
::python
from pdfminer.high_level import extract_text
texto = extract_text("documento.pdf")
print(texto)
Instalación: pip install pdfminer.six.
Apache Tika como API
Si el PDF es complejo o necesitas extraer metadatos de varios formatos, puedes levantar Tika como servicio y consultarlo desde Python:
::python
import requests
with open("documento.pdf", "rb") as archivo:
respuesta = requests.put(
"http://localhost:9998/tika",
data=archivo,
headers={"Accept": "text/plain"},
timeout=60,
)
print(respuesta.text)
Tika devuelve texto plano, HTML o metadatos según el encabezado Accept. Es la opción más pesada, pero también la más tolerante con documentos raros.
Comparación rápida
| Herramienta | Ideal para | API | OCR |
|---|---|---|---|
| pdftotext | PDFs simples y scripts rápidos | No | No |
| pypdf | Aplicaciones Python sencillas | Sí | No |
| pdfminer.six | PDFs con columnas o tablas | Sí | No |
| Apache Tika | Muchos formatos y metadatos | Sí | No |
Ninguna de estas herramientas hace OCR: si el PDF es una imagen escaneada, primero hay que pasarlo por Tesseract, OCRmyPDF o un servicio de OCR.
Preguntas frecuentes
¿Qué pasa si el PDF está escaneado?
El texto no existe en el archivo, así que primero hay que aplicar OCR. ocrmypdf documento.pdf documento-con-texto.pdf es una buena opción local; si son muchos archivos, un servicio de OCR suele ser más cómodo.
¿Cuál es la mejor opción para muchos PDFs?
Para documentos simples, pdftotext es imbatible por velocidad. Para una aplicación Python, pypdf o pdfminer.six. Para lotes heterogéneos, Tika.
¿Cómo extraigo solo una página?
Con pypdf puedes leer una página concreta:
::python
from pypdf import PdfReader
reader = PdfReader("documento.pdf")
texto = reader.pages[0].extract_text()
Comentarios finales
-
En general, quien me ha brindado mejores resultados para pdf's complejos ha sido apache tika y pdftotext para documentos sencillos.
-
Si lo que se busca es extraer imágenes de un PDF, en mi caso PDFBox me ha dado buenos resultados también.
Referencia:
- Tools for Extracting Data and Text from PDFs - A Review: tools-for-extracting-data
Comentarios !
comments powered by Disqus