OCR y tablas en PDFs reales

Los PDFs fáciles ya tienen texto seleccionable. Los PDFs reales de empresa traen escaneos, columnas, sellos, tablas partidas y facturas torcidas. Si no procesas bien esa capa, el RAG nace confundido.

Objetivos de aprendizaje
  • Decidir cuándo necesitas OCR y cuándo basta extracción de texto.
  • Preservar tablas, páginas y metadatos antes de indexar.
  • Crear una salida intermedia revisable antes de embeddings.
En cristiano: document understanding. Es entender la estructura del documento, no solo leer letras: columnas, tablas, encabezados, pies, orden de lectura, páginas y relación entre campos.

Pipeline recomendado

Terminal
PDF o imagen
  -> detectar si hay texto seleccionable
  -> OCR si hace falta
  -> reconstruir orden de lectura
  -> extraer tablas como HTML/Markdown/JSON
  -> añadir metadatos: documento, página, sección
  -> revisión de muestra
  -> chunking e indexación
Idea clave. Nunca indexes directamente el primer texto que salga del OCR. Guarda Markdown/JSON intermedio y revisa varias páginas al azar.

Ejemplo con Docling

Docling está pensado para convertir documentos complejos en estructura útil para IA: texto, tablas, layout y formatos exportables.

Terminal
pip install docling

docling factura.pdf --to md --output salida_docling/

# Revisa antes de indexar:
ls salida_docling
cat salida_docling/factura.md

Formato de salida para facturas

Terminal
{
  "document_id": "factura-2026-001",
  "page": 1,
  "type": "invoice",
  "supplier": "Proveedor S.L.",
  "invoice_number": "F-2026-001",
  "date": "2026-07-02",
  "total": 242.00,
  "currency": "EUR",
  "table_rows": [
    {"concept": "Servicio mensual", "base": 200.00, "vat": 42.00}
  ],
  "source_text": "fragmento verificable..."
}
Cuidado. Las tablas son el punto donde más fallan los RAG. Si una fila se desplaza de columna, una respuesta aparentemente correcta puede usar importes equivocados.
Comprueba que funciona. Prueba con tres PDFs: uno digital, uno escaneado y uno con tabla partida en dos páginas. La extracción debe conservar página, tabla y fuente; si no, no lo indexes todavía.
Guardar y reabrir el proyecto.
Regla de oro: OCR primero, revisión después, embeddings al final. El vector no arregla una tabla rota.