Análisis de documentos con IA local
Qué cubre este artículo sobre análisis de documentos
- Cómo analizar documentos con IA local.
- Cómo funcionan la extracción de texto, resumen y extracción de metadatos.
- Cómo clasificar y etiquetar documentos de forma automática.
- Ejemplos prácticos con facturas, contratos, reportes y correspondencia.
- Mejores prácticas para precisión, privacidad y rendimiento.
Introducción: Análisis de documentos explicado
El análisis de documentos significa que la IA lee un documento y comprende su contenido. Puede resumir, clasificar, extraer metadatos y responder preguntas. Con Ollama en local, todos tus documentos permanecen privados.
Este artículo está dirigido a usuarios que desean analizar documentos con IA. Los conceptos básicos los encontrarás en Documentos y PDF y Ollama.
Por qué necesito análisis de documentos
Imagina que tienes 500 PDFs: facturas, contratos, reportes. En lugar de leer cada uno manualmente, la IA analiza: “Esta es una factura de la empresa X por 1.234 €, vencimiento 15.03. Riesgo: Sin condiciones de pago especificadas.” La IA convierte documentos desestructurados en datos estructurados.
Análisis de documentos en resumen
Documento → Extraer texto (OCR si es necesario) → IA analiza → Datos estructurados (categoría, etiquetas, resumen, metadatos). Todo en local con Ollama.
La idea central es transformar texto desestructurado en datos estructurados.
Para quién es este artículo
- Trabajadores de oficina que necesitan procesar documentos automáticamente.
- Empresas que analizan facturas y contratos.
- Desarrolladores que construyen pipelines de documentos.
- Self-hosters que ejecutan análisis de documentos en local.
Términos importantes
- Ollama - Servidor de modelos local. Cuándo es útil: el backend de IA.
- OCR - Texto extraído de imágenes. Cuándo es útil: para documentos escaneados.
- Clasificación - Categorizar documentos. Cuándo es útil: para organización.
- Metadatos - Datos estructurados. Cuándo es útil: para bases de datos.
- RAG - Preguntas y respuestas sobre documentos. Cuándo es útil: para consultas.
- Modelos de visión - Para imágenes. Cuándo es útil: para escaneos.
El pipeline
Documento (PDF/Word/Imagen)
│
▼
Extracción de texto
├─ ¿Texto presente? → Usar directamente
└─ ¿Sin texto? → OCR (Tesseract/Modelo de visión)
│
▼
Análisis con IA (Ollama)
├─ Clasificar: ¿Factura? ¿Contrato? ¿Reporte?
├─ Generar etiquetas: Temas, categorías
├─ Resumir: Contenido clave
└─ Metadatos: Fecha, remitente, monto, ...
│
▼
Datos estructurados
├─ Guardar en base de datos
├─ Mover a carpeta
└─ Exportar como JSON
Ejemplo práctico 1: Analizar facturas
import requests
import json
def analyze_invoice(text):
"""Analizar factura"""
response = requests.post("http://ollama:11434/api/chat", json={
"model": "llama3.1",
"messages": [
{"role": "system", "content": "Extrae datos de factura como JSON: numero_factura, fecha, monto, moneda, remitente, fecha_vencimiento, items (array)."},
{"role": "user", "content": f"Factura:\n{text[:4000]}"}
],
"stream": False,
"format": "json"
})
return json.loads(response.json()["message"]["content"])
# Ejemplo
invoice_data = analyze_invoice(invoice_text)
# Output: {"numero_factura": "RE-2024-1234", "monto": 1234.56, "moneda": "EUR", ...}
Ejemplo práctico 2: Analizar contratos
def analyze_contract(text):
"""Analizar contrato"""
response = requests.post("http://ollama:11434/api/chat", json={
"model": "llama3.1",
"messages": [
{"role": "system", "content": "Analiza el contrato como JSON: tipo_contrato, contraparte, duracion, plazo_cancelacion, clausulas (array), riesgos (array)."},
{"role": "user", "content": f"Contrato:\n{text[:6000]}"}
],
"stream": False,
"format": "json"
})
return json.loads(response.json()["message"]["content"])
Ejemplo práctico 3: Clasificar documentos
def classify_document(text):
"""Clasificar documento"""
categories = [
"factura", "contrato", "reporte", "correspondencia",
"acta", "manual", "otro"
]
response = requests.post("http://ollama:11434/api/chat", json={
"model": "llama3.1",
"messages": [
{"role": "system", "content": f"Clasifica el documento en una de estas categorías: {', '.join(categories)}. Responde solo con la categoría."},
{"role": "user", "content": f"Documento:\n{text[:2000]}"}
],
"stream": False
})
return response.json()["message"]["content"].strip().lower()
Ejemplo práctico 4: Generar etiquetas
def generate_tags(text, max_tags=5):
"""Generar etiquetas para documento"""
response = requests.post("http://ollama:11434/api/chat", json={
"model": "llama3.1",
"messages": [
{"role": "system", "content": f"Asigna {max_tags} etiquetas relevantes para el documento. Responde como array JSON."},
{"role": "user", "content": f"Documento:\n{text[:2000]}"}
],
"stream": False,
"format": "json"
})
return json.loads(response.json()["message"]["content"])
Ejemplo práctico 5: Pipeline completo
import os
from pathlib import Path
def process_document(filepath):
"""Análisis completo de documento"""
# 1. Extraer texto
text = extract_text(filepath) # PDF, DOCX, TXT
# 2. Clasificar
category = classify_document(text)
# 3. Generar etiquetas
tags = generate_tags(text)
# 4. Resumir
summary = summarize(text)
# 5. Extraer metadatos
metadata = extract_metadata(text)
# 6. Guardar
result = {
"file": filepath,
"category": category,
"tags": tags,
"summary": summary,
"metadata": metadata
}
save_to_database(result)
move_to_folder(filepath, category)
return result
Consideraciones de seguridad
- Documentos confidenciales: Todos los datos permanecen en local con Ollama. Con APIs en la nube, los documentos se envían afuera. Ver Privacidad.
- Inyección de prompts: Los documentos pueden contener inyecciones. Ver Inyección de prompts.
- Errores de OCR: Los documentos escaneados tienen errores de OCR. Los resultados de la IA pueden ser incorrectos como consecuencia.
- Validación: Las extracciones de IA deben validarse para datos críticos.
Trampas comunes
- Errores de OCR: Escaneos de baja calidad resultan en mala extracción. La calidad es importante.
- Longitud de contexto: Los documentos grandes deben dividirse en chunks. Ver Longitud de contexto.
- Clasificación incorrecta: La IA puede clasificar mal. Para documentos críticos, requiere revisión humana.
- Demasiadas etiquetas: Más de 5-7 etiquetas no son prácticas. Establece límites.
- Rendimiento: Documentos grandes con muchas llamadas a IA resultan lentos. Procesa de forma asincrónica.
Enlaces relacionados
- Documentos y PDF - Descripción general.
- Chatbot de PDF - Chatear con documentos.
- RAG local - Preguntas y respuestas sobre documentos.
- Ollama - Servidor de modelos.
- Inyección de prompts - Seguridad.
- Privacidad - Protección de datos.
Puntos clave:
- Análisis de documentos: extraer texto → IA analiza → datos estructurados.
- Clasificación, etiquetas, resumen, metadatos, todo automático.
- Para facturas, contratos, reportes y correspondencia.
- En local con Ollama: todos los datos permanecen privados.
- Ten en cuenta errores de OCR e inyección de prompts.
FAQ
¿Qué es análisis de documentos con IA?
¿Qué formatos se soportan?
¿Qué tan preciso es el análisis?
¿Mis documentos están seguros?
¿Cuál es el costo?
¿Puedo analizar muchos documentos a la vez?
Fuentes y lecturas recomendadas
- Ollama - Servidor de modelos local.
- Tesseract OCR - Motor OCR.
- PyPDF2 - Extracción de texto de PDF.
- python-docx - Documentos Word.


