Files
checklist/docs/pdf-extraction-improvements.md
ronalds 50909e4499 Mejoras Implementadas en Extracción de PDFs con IA
He mejorado significativamente el sistema de extracción de texto de PDFs para el análisis con IA. Aquí están los cambios principales:

🎯 Problemas Resueltos
Límites muy pequeños → Aumentados significativamente según capacidad del modelo
No extraía todo el documento → Ahora procesa hasta 100k caracteres
Duplicación de contenido → Detecta y elimina páginas repetidas
Sin información de estado → Reporta páginas procesadas, truncado, etc.
2025-12-03 00:55:11 -03:00

4.6 KiB

Mejoras en la Extracción de PDFs con IA

Versión Backend: 1.0.95

Problema Original

El sistema tenía limitaciones al procesar PDFs con IA:

  1. Límites muy pequeños: Solo extraía 2,000-4,000 caracteres
  2. Sin manejo de duplicaciones: Páginas repetidas se procesaban múltiples veces
  3. No aprovechaba contextos largos: Los modelos modernos soportan millones de tokens
  4. Falta de información: No reportaba páginas procesadas o si el contenido fue truncado

Solución Implementada

1. Función Centralizada de Extracción

Nueva función extract_pdf_text_smart() que:

  • Extrae texto de forma inteligente
  • Detecta y evita páginas duplicadas
  • Maneja límites configurables
  • Reporta estadísticas completas (páginas, caracteres, truncado)
  • Manejo robusto de errores
pdf_result = extract_pdf_text_smart(pdf_content, max_chars=50000)
# Retorna:
# {
#   'text': '...',
#   'pages': 10,
#   'pages_processed': 9,  # Si una página estaba duplicada
#   'total_chars': 45000,
#   'truncated': False,
#   'success': True
# }

2. Límites Optimizados por Caso de Uso

Endpoint Límite Anterior Límite Nuevo Modelo Objetivo
/api/analyze-image (OpenAI) 4,000 chars 30,000 chars GPT-4 (128k tokens)
/api/analyze-image (Gemini) 4,000 chars 100,000 chars Gemini 1.5/2.0 (2M tokens)
/api/ai/chat-assistant 2,000 chars 50,000 chars Equilibrado para contexto

3. Detección de Duplicaciones

El sistema ahora verifica si el contenido de una página ya existe antes de agregarlo:

if page_text.strip() not in full_text:
    full_text += f"\n--- Página {page_num}/{total_pages} ---\n{page_text.strip()}\n"

Esto previene:

  • PDFs con páginas idénticas repetidas
  • Documentos mal generados con contenido duplicado
  • Uso innecesario de tokens en el análisis IA

4. Información Mejorada

El sistema ahora reporta:

  • Páginas totales: Total de páginas en el PDF
  • Páginas procesadas: Páginas únicas con contenido
  • Caracteres totales: Tamaño real del texto extraído
  • Indicador de truncado: Si el PDF fue limitado

Ejemplo de output:

📄 PDF procesado: manual-vehiculo.pdf - 87450 caracteres, 8/10 páginas (TRUNCADO)

Capacidades de Contexto por Modelo

OpenAI GPT-4

  • Contexto: ~128,000 tokens (~500,000 caracteres)
  • Límite aplicado: 30,000 caracteres
  • Razón: Balance entre contexto útil y costo

Gemini 1.5/2.0 Pro

  • Contexto: 2,000,000 tokens (~8,000,000 caracteres)
  • Límite aplicado: 100,000 caracteres
  • Razón: Aprovechar contexto masivo sin sobrecargar

Chat Assistant

  • Límite: 50,000 caracteres
  • Razón: Incluye historial + contexto de fotos + PDF

Casos de Uso Soportados

PDFs Pequeños (1-5 páginas)

Extracción completa sin truncado

PDFs Medianos (5-20 páginas)

Extracción completa o parcial según contenido

PDFs Grandes (20+ páginas)

Extracción inteligente con truncado después de límite

PDFs con Páginas Duplicadas

Detección automática y eliminación

Múltiples PDFs en Chat

Cada uno procesado independientemente con su límite

Indicadores de Estado

En Logs del Servidor

📄 PDF procesado: documento.pdf - 25000 caracteres, 10/10 páginas
📄 PDF procesado: manual.pdf - 50000 caracteres, 15/20 páginas (TRUNCADO)

En Respuesta al Cliente

{
  "attached_files": [
    {
      "filename": "manual.pdf",
      "type": "application/pdf",
      "pages": 20,
      "pages_processed": 15,
      "total_chars": 75000,
      "truncated": true
    }
  ]
}

Próximas Mejoras Potenciales

  1. Chunking Inteligente: Para PDFs muy grandes, dividir en chunks semánticos
  2. OCR Integrado: Detectar PDFs escaneados y aplicar OCR automático
  3. Resumen Automático: Para PDFs grandes, generar resumen antes de análisis
  4. Cache de Extracciones: Guardar texto extraído en DB para reutilización

Migración

No requiere migración de base de datos. Los cambios son retrocompatibles.

Testing

Para probar las mejoras:

  1. PDF pequeño (< 10 páginas): Debe procesarse completo
  2. PDF grande (> 50 páginas): Debe truncarse y reportar info
  3. PDF con duplicados: Debe eliminar páginas repetidas
  4. Múltiples PDFs: Cada uno procesado independientemente

Notas Técnicas

  • La función extract_pdf_text_smart() está en main.py línea ~210
  • Usa pypdf.PdfReader para extracción
  • Maneja encoding UTF-8 automáticamente
  • Thread-safe (usa BytesIO)