Document Intelligence Pipeline: convierte PDFs difíciles en datos útiles para IA, Excel y automatización
Convierte PDFs, escaneos y contratos en Markdown, JSON y tablas listas para IA, Excel o n8n. Aprende un pipeline profesional con Docling, Marker y OCR sin perder trazabilidad.
Por Equipo Starbyte
Document Intelligence Pipeline: convierte PDFs difíciles en datos útiles para IA, Excel y automatización
El problema real: tus documentos no están “digitalizados”, solo están guardados como archivos
Muchas organizaciones creen que ya digitalizaron sus procesos porque tienen carpetas llenas de PDFs.
Pero un PDF escaneado, una resolución, un contrato, un informe técnico o una cotización no siempre es información utilizable. Muchas veces es solo una imagen encerrada en un archivo.
Puedes abrirlo.
Puedes leerlo.
Puedes imprimirlo.
Puedes enviarlo por correo.
Pero si quieres responder preguntas, llenar una tabla, alimentar un flujo de n8n, construir un RAG o extraer datos confiables, el PDF se vuelve un problema.
El documento tiene texto, pero también tiene estructura: títulos, subtítulos, tablas, firmas, anexos, sellos, fechas, montos, códigos, notas al pie, encabezados, numeración, páginas escaneadas, imágenes, columnas, cuadros y campos repetidos.
Un OCR básico puede sacar texto. Pero no necesariamente entiende la estructura.
Ahí aparece una disciplina que está creciendo rápido: Document Intelligence Pipeline.
No se trata de “pasar PDF a texto”.
Se trata de convertir documentos difíciles en datos limpios, trazables y reutilizables.
Por qué este tema está en tendencia
La inteligencia documental está creciendo porque la IA generativa necesita buenos datos para funcionar bien. No basta con tener documentos: hay que convertirlos en información estructurada.
IBM impulsa Docling, un proyecto open source para convertir documentos complejos en datos listos para IA, detectando tablas, fórmulas, orden de lectura, OCR y estructura documental. Su repositorio oficial lo presenta como una herramienta para preparar documentos para GenAI.
Marker también se ha posicionado como una herramienta open source fuerte para convertir PDF, imágenes, DOCX, PPTX, XLSX, HTML y EPUB a Markdown, JSON, chunks y HTML, con soporte para tablas, formularios, ecuaciones, imágenes y extracción estructurada.
En paralelo, Mistral OCR y su Document AI apuntan al procesamiento de PDFs, scans, DOCX, PPTX y fuentes manuscritas, con salidas en Markdown, JSON y extracción por plantillas o anotaciones.
La tendencia es clara:
La IA documental dejó de ser OCR. Ahora es conversión estructurada, validación y preparación para automatización.
La idea central: no conviertas documentos; construye una tubería
Un error común es buscar “la mejor herramienta OCR” como si existiera una sola respuesta.
Pero los documentos no son iguales.
Un contrato nacido digitalmente no necesita el mismo tratamiento que un escaneo borroso.
Una tabla financiera no se procesa igual que una carta simple.
Un informe con anexos no se analiza igual que una factura.
Un PDF público no tiene el mismo riesgo que un expediente con datos personales.
Por eso la solución profesional no es una herramienta única.
Es una tubería:
Documento
→ clasificación
→ extracción
→ normalización
→ validación
→ salida estructurada
→ trazabilidad
→ automatización
A esa tubería la llamaremos Document Intelligence Pipeline.
La primera decisión: local, cloud o híbrido
Antes de instalar nada, decide dónde procesarás los documentos.
Local
Ideal para documentos sensibles, contratos internos, expedientes, datos personales, pruebas iniciales y organizaciones que no quieren subir archivos a terceros.
Herramientas candidatas:
- Docling;
- Marker;
- Tesseract;
- PyMuPDF;
- scripts propios.
Cloud
Ideal para alta precisión, OCR multimodal avanzado, documentos muy complejos, extracción con plantillas, escalabilidad y baja capacidad técnica interna.
Herramientas candidatas:
- Mistral OCR / Document AI;
- APIs de OCR;
- plataformas Document AI.
Híbrido
Ideal para clasificar localmente, anonimizar datos, enviar solo fragmentos no sensibles, usar cloud para documentos difíciles y mantener control sobre datos críticos.
La regla profesional:
No subas documentos sensibles a una API externa solo porque el OCR es mejor. Primero clasifica el riesgo.
Mapa rápido de herramientas
| Herramienta | Mejor para | Ventaja | Precaución |
|---|---|---|---|
| Docling | PDFs complejos, tablas, estructura, RAG | open source, orientado a GenAI | puede requerir ajustes por documento |
| Marker | PDF a Markdown/JSON rápido y flexible | convierte múltiples formatos, soporta chunks | puede necesitar GPU para cargas pesadas |
| Mistral OCR | documentos complejos y extracción cloud | alta capacidad multimodal y JSON | revisar privacidad y costos |
| Tesseract | OCR clásico local | maduro y offline | no entiende estructura avanzada |
| PyMuPDF | extracción técnica de PDF digital | rápido y controlable | limitado en escaneos |
No elijas por popularidad. Elige por tipo de documento.
El truco experto: antes del OCR, clasifica el documento
Muchas tuberías fallan porque tratan todos los PDFs igual.
Primero crea una clasificación simple:
A. PDF nacido digitalmente
B. PDF escaneado
C. PDF mixto
D. PDF con tablas críticas
E. PDF con firmas/sellos
F. Documento con datos sensibles
G. Documento con imágenes relevantes
Cada tipo activa una ruta distinta.
Ejemplo:
PDF digital simple → extracción directa
PDF escaneado → OCR
PDF con tablas → parser con tablas
PDF sensible → procesamiento local
PDF público complejo → API cloud posible
Esta clasificación ahorra tiempo y reduce errores.
Preparación del entorno local
Usaremos Python.
Crea carpeta:
mkdir document-intelligence-pipeline
cd document-intelligence-pipeline
Crea entorno virtual:
python -m venv .venv
Activa el entorno.
En Windows:
.venv\Scripts\activate
En Linux/macOS:
source .venv/bin/activate
Actualiza pip:
python -m pip install --upgrade pip
Crea carpetas:
mkdir input output output/markdown output/json output/tables output/evidence scripts
Estructura esperada:
document-intelligence-pipeline/
├── input/
├── output/
│ ├── markdown/
│ ├── json/
│ ├── tables/
│ └── evidence/
└── scripts/
Ruta 1: convertir documentos con Docling
Instala Docling:
pip install docling
Prueba conversión básica:
docling input/documento.pdf --to md --output output/markdown
Si quieres exportar a JSON:
docling input/documento.pdf --to json --output output/json
La ventaja de Docling es que no piensa solo en texto plano. Está diseñado para preparar documentos para flujos de IA, conservando estructura útil como tablas, orden de lectura y elementos documentales.
Úsalo cuando necesites Markdown limpio, estructura, tablas, preparación para RAG, procesamiento local y trazabilidad básica.
Ruta 2: convertir con Marker
Instala Marker:
pip install marker-pdf
Convierte un PDF a Markdown:
marker_single input/documento.pdf output/markdown
Marker puede convertir documentos a Markdown, JSON, chunks y HTML, y soporta múltiples tipos de archivo. Es útil cuando quieres una salida directa para RAG o indexación.
Úsalo cuando necesitas conversión rápida, chunks, tablas, fórmulas, salida Markdown/JSON o procesamiento local.
Ruta 3: usar OCR cloud cuando el documento es muy difícil
Hay documentos donde lo local puede quedarse corto:
- scans de baja calidad;
- tablas deformadas;
- sellos encima de texto;
- handwriting;
- imágenes con información;
- documentos con layout irregular;
- anexos mezclados.
En esos casos, un OCR avanzado como Mistral OCR puede ayudar. Su documentación indica que el procesador OCR devuelve texto extraído, imágenes, bounding boxes y metadatos de estructura, facilitando el trabajo programático con el contenido reconocido.
Pero úsalo con criterio:
documentos públicos o anonimizados → posible cloud
documentos sensibles → local o anonimización previa
La decisión correcta no es “cloud siempre” ni “local siempre”. Es clasificar.
El patrón profesional: doble salida
No generes solo Markdown.
Para que el documento sea realmente útil, genera dos salidas:
1. Markdown para lectura, RAG y revisión humana.
2. JSON para automatización, Excel, base de datos o n8n.
El Markdown conserva contexto.
El JSON permite procesamiento.
Ejemplo de salida JSON esperada:
{
"tipo_documento": "contrato",
"titulo": "Contrato de prestación de servicios",
"fecha_documento": "2026-05-20",
"partes": [
{
"nombre": "Empresa A",
"rol": "contratante"
},
{
"nombre": "Empresa B",
"rol": "contratista"
}
],
"monto_total": 15000.00,
"moneda": "PEN",
"plazo_dias": 45,
"alertas": [],
"campos_faltantes": []
}
La tubería no termina cuando extraes texto. Termina cuando tienes datos útiles.
Crea un contrato de extracción
Antes de pedirle a una IA que extraiga datos, diseña el esquema.
Ejemplo para contratos:
{
"tipo_documento": "string",
"titulo": "string",
"fecha_documento": "YYYY-MM-DD | null",
"partes": [
{
"nombre": "string",
"rol": "contratante | contratista | testigo | otro"
}
],
"monto_total": "number | null",
"moneda": "PEN | USD | EUR | null",
"plazo_dias": "integer | null",
"obligaciones_principales": ["string"],
"penalidades": ["string"],
"campos_faltantes": ["string"],
"alertas": ["string"]
}
Reglas:
No inventar.
Usar null si falta.
Registrar campos faltantes.
Registrar contradicciones.
No agregar claves extra.
Esto evita que la IA entregue una interpretación bonita pero inútil.
Script base para clasificar documentos por tipo
Crea:
nano scripts/classify_document.py
Código:
from pathlib import Path
def classify_pdf(path: Path) -> str:
name = path.name.lower()
if "contrato" in name:
return "contrato"
if "factura" in name or "cotizacion" in name:
return "comercial"
if "informe" in name:
return "informe"
if "resolucion" in name:
return "resolucion"
return "desconocido"
input_dir = Path("input")
for pdf in input_dir.glob("*.pdf"):
print(pdf.name, "→", classify_pdf(pdf))
Ejecuta:
python scripts/classify_document.py
Este clasificador es simple, pero te obliga a pensar en rutas. Luego puedes mejorarlo con IA.
Script para revisar si un PDF tiene texto extraíble
Instala PyMuPDF:
pip install pymupdf
Crea:
nano scripts/check_pdf_text.py
Código:
from pathlib import Path
import fitz
def has_extractable_text(pdf_path: Path, min_chars: int = 100) -> bool:
doc = fitz.open(pdf_path)
text = ""
for page in doc[:3]:
text += page.get_text()
return len(text.strip()) >= min_chars
for pdf in Path("input").glob("*.pdf"):
status = "PDF digital o mixto" if has_extractable_text(pdf) else "probable escaneado"
print(f"{pdf.name}: {status}")
Ejecuta:
python scripts/check_pdf_text.py
Esto te permite decidir si vas por extracción directa u OCR.
El semáforo documental
Clasifica cada archivo con un semáforo.
Verde:
PDF digital, texto extraíble, estructura simple.
Ámbar:
PDF mixto, algunas tablas, anexos, estructura irregular.
Rojo:
escaneado, mala calidad, tablas críticas, firmas, datos sensibles.
Ruta recomendada:
| Semáforo | Ruta |
|---|---|
| Verde | Docling o PyMuPDF directo |
| Ámbar | Docling o Marker + validación |
| Rojo | OCR especializado + revisión humana |
No todos los documentos merecen el mismo costo.
Cómo validar la salida Markdown
Un Markdown útil debe cumplir:
- mantiene títulos;
- conserva tablas;
- respeta orden de lectura;
- no mezcla encabezados con cuerpo;
- no pierde montos;
- no corta páginas;
- identifica anexos;
- no duplica texto;
- no inventa contenido;
- permite citar secciones.
Revisa manualmente una muestra.
No proceses 10,000 PDFs sin evaluar 20 primero.
Cómo convertir Markdown en chunks para RAG
Una vez que tienes Markdown limpio, puedes dividirlo.
Regla simple:
chunk por sección, no por número fijo de caracteres.
Mala división:
cada 1,000 caracteres
Mejor división:
por título, subtítulo, cláusula o tabla
Así la IA recupera fragmentos con sentido.
Naming profesional de archivos
No uses:
documento final escaneado nuevo ultimo 2.pdf
Usa:
2026-05-20_contrato_servicios_empresa-a_empresa-b.pdf
Para salidas:
2026-05-20_contrato_servicios_empresa-a_empresa-b.md
2026-05-20_contrato_servicios_empresa-a_empresa-b.json
2026-05-20_contrato_servicios_empresa-a_empresa-b_evidence.json
La automatización empieza con nombres sanos.
Evidencia: lo que casi nadie guarda
Una tubería profesional debe guardar evidencia.
Ejemplo:
{
"archivo_original": "contrato.pdf",
"hash_sha256": "abc123...",
"herramienta": "docling",
"version_herramienta": "x.y.z",
"fecha_procesamiento": "2026-06-01",
"salida_markdown": "output/markdown/contrato.md",
"salida_json": "output/json/contrato.json",
"paginas": 12,
"requiere_revision": true,
"motivo_revision": "tabla de penalidades detectada"
}
Esto permite responder:
de dónde salió el dato;
cuándo se procesó;
con qué herramienta;
si requiere revisión.
Sin evidencia, la automatización documental se vuelve frágil.
Script para generar hash del documento
Crea:
nano scripts/hash_files.py
Código:
from pathlib import Path
import hashlib
def sha256_file(path: Path) -> str:
h = hashlib.sha256()
with path.open("rb") as f:
for chunk in iter(lambda: f.read(8192), b""):
h.update(chunk)
return h.hexdigest()
for file in Path("input").glob("*"):
if file.is_file():
print(file.name, sha256_file(file))
Ejecuta:
python scripts/hash_files.py
Ese hash te ayuda a demostrar que el archivo no cambió.
Flujo para n8n
Una vez tengas Markdown y JSON, n8n puede hacer el resto.
Flujo posible:
Carpeta nueva / Webhook
→ leer archivo
→ convertir con Docling o Marker
→ validar JSON
→ si faltan campos, enviar alerta
→ si está completo, guardar en Sheets o base de datos
→ crear tarea de revisión
→ generar resumen ejecutivo
→ archivar evidencia
Lo importante es separar:
extracción
validación
decisión
almacenamiento
No mezcles todo en un solo prompt.
Mini pipeline recomendado
Para empezar, usa esta secuencia:
1. Guardar PDF en input.
2. Calcular hash.
3. Detectar si tiene texto.
4. Clasificar tipo de documento.
5. Convertir a Markdown.
6. Revisar muestra manual.
7. Extraer JSON con contrato.
8. Validar campos.
9. Guardar evidencia.
10. Automatizar solo si pasa validación.
Esta secuencia evita el error típico: confiar en una extracción sin revisión.
Ejemplo de prompt para extraer JSON desde Markdown
Actúa como extractor documental.
Usa el Markdown proporcionado para generar un JSON según el contrato.
Reglas:
- No inventes datos.
- Si un dato no aparece, usa null.
- Agrega campos faltantes en "campos_faltantes".
- Agrega contradicciones en "alertas".
- No agregues claves extra.
- Devuelve solo JSON válido.
Contrato:
[PEGAR JSON SCHEMA O ESTRUCTURA]
Markdown:
[PEGAR CONTENIDO]
Este prompt es simple, pero poderoso si el Markdown está bien convertido.
Cuándo NO automatizar completamente
No automatices sin revisión si el documento:
- tiene efectos legales;
- contiene datos personales sensibles;
- tiene tablas financieras críticas;
- viene escaneado con mala calidad;
- incluye firmas o sellos relevantes;
- será usado para una decisión administrativa;
- contiene montos, plazos o penalidades;
- alimentará un sistema productivo;
- tiene contradicciones internas.
La automatización documental debe ser proporcional al riesgo.
Caso práctico: contratos
Flujo recomendado:
contrato.pdf
→ hash
→ conversión a Markdown
→ extracción de partes, monto, plazo, penalidades
→ JSON validado
→ revisión humana de campos críticos
→ registro en Excel o base de datos
Campos críticos:
- partes;
- objeto;
- monto;
- moneda;
- plazo;
- penalidades;
- forma de pago;
- resolución;
- jurisdicción;
- anexos.
Nunca aceptes montos y plazos sin revisión en documentos legales.
Caso práctico: informes técnicos
Flujo recomendado:
informe.pdf
→ Markdown
→ extracción de resumen, hallazgos, recomendaciones
→ tabla de acciones
→ responsable sugerido
→ evidencia
Campos útiles:
{
"titulo": "string",
"fecha": "YYYY-MM-DD | null",
"hallazgos": ["string"],
"recomendaciones": ["string"],
"riesgos": ["string"],
"acciones": [
{
"accion": "string",
"responsable": "string | null",
"prioridad": "baja | media | alta"
}
]
}
Caso práctico: cotizaciones
Flujo recomendado:
cotizacion.pdf
→ OCR si es imagen
→ extracción de proveedor, RUC, items, montos
→ validación de suma
→ alerta si el total no coincide
→ carga en Excel
Campos críticos:
- proveedor;
- RUC;
- fecha;
- moneda;
- subtotal;
- IGV;
- total;
- items;
- vigencia;
- forma de pago.
Aquí la validación matemática es obligatoria.
Checklist de calidad documental
| Revisión | Estado |
|---|---|
| Documento clasificado | ☐ |
| Hash generado | ☐ |
| Tipo PDF detectado | ☐ |
| Ruta local/cloud decidida | ☐ |
| Markdown generado | ☐ |
| Tablas revisadas | ☐ |
| JSON extraído | ☐ |
| Campos faltantes listados | ☐ |
| Alertas registradas | ☐ |
| Evidencia guardada | ☐ |
| Revisión humana aplicada | ☐ |
| Salida lista para Excel/n8n | ☐ |
Errores comunes
Error 1: creer que OCR es suficiente
OCR reconoce texto. No siempre entiende estructura.
Error 2: subir todo a una IA externa
Primero clasifica privacidad y sensibilidad.
Error 3: no guardar evidencia
Después no sabrás de dónde salió el dato.
Error 4: no validar tablas
Las tablas son donde más se pierden montos, columnas y relaciones.
Error 5: automatizar documentos críticos sin revisión
Legal, financiero y administrativo necesitan control humano.
Error 6: cortar chunks por tamaño fijo
Para RAG documental, divide por secciones y sentido.
Buenas prácticas
- Clasifica documentos antes de procesar.
- Usa local para información sensible.
- Usa cloud solo cuando el valor justifique el riesgo.
- Genera Markdown y JSON.
- Diseña contratos de extracción.
- Valida campos críticos.
- Guarda hash y evidencia.
- Revisa muestras antes de procesar lotes.
- Divide chunks por estructura.
- Automatiza solo después de validar.
Prompt experto para diseñar tu pipeline documental
Actúa como arquitecto experto en Document Intelligence, OCR, RAG y automatización.
Quiero diseñar un pipeline para convertir documentos en datos útiles.
Contexto:
- Tipo de documentos:
- Volumen mensual:
- Nivel de sensibilidad:
- Salida deseada: Markdown / JSON / Excel / n8n / base de datos
- Campos a extraer:
- Herramientas disponibles:
- Restricciones de privacidad:
- Necesidad de revisión humana:
Entrega:
1. clasificación de documentos;
2. ruta local, cloud o híbrida;
3. herramientas recomendadas;
4. estructura de carpetas;
5. contrato JSON de extracción;
6. validaciones necesarias;
7. evidencia que debe guardarse;
8. flujo para automatización;
9. riesgos y controles.
Plan de implementación en 7 días
Día 1: inventario
Reúne 20 documentos reales y clasifícalos por tipo.
Día 2: entorno
Instala Python, Docling, Marker y PyMuPDF.
Día 3: conversión
Convierte documentos a Markdown y revisa calidad.
Día 4: contrato
Diseña JSON Schema por tipo documental.
Día 5: extracción
Extrae JSON desde Markdown y registra faltantes.
Día 6: validación
Revisa montos, fechas, campos críticos y tablas.
Día 7: automatización
Conecta salidas a Excel, n8n o base de datos.
Idea clave
El futuro de la IA documental no consiste en subir PDFs a un chatbot y esperar una respuesta bonita. Consiste en construir una tubería: clasificar documentos, convertirlos a Markdown, extraer JSON, validar campos críticos, guardar evidencia y recién entonces automatizar. Cuando haces eso, los documentos dejan de ser archivos muertos y se convierten en datos listos para decisiones, reportes, RAG, Excel y flujos reales.