Ir al contenido

Docling - Análisis de Documentos para RAG

Docling - Análisis de Documentos para RAG

Docling es un conjunto de herramientas de análisis de documentos de código abierto (un proyecto de LF AI & Data) que convierte PDF, DOCX, PPTX, XLSX, HTML, imágenes, y más en una representación estructurada — Markdown o JSON limpio que preserva maquetación, tablas, encabezados, y orden de lectura. Incluye chunking consciente de jerarquía que enriquece chunks con metadatos estructurales, e se integra directamente con LangChain y LlamaIndex, lo que lo convierte en una de las opciones de código abierto más sólidas para la etapa de ingestión de una canalización RAG.

Instalación

MétodoComando
pippip install docling
uvuv add docling
Con extras OCRpip install "docling[ocr]"
Verificardocling --version

Uso de CLI

ComandoDescripción
docling document.pdfConvierte un archivo a Markdown (predeterminado)
docling --to json document.pdfSalida JSON estructurada
docling --to md --output out/ report.docxConvierte a un directorio
docling https://example.com/page.htmlConvierte desde una URL
docling --ocr scanned.pdfFuerza OCR para documentos escaneados
docling --helpLista completa de opciones

Python: Conversión Básica

from docling.document_converter import DocumentConverter

converter = DocumentConverter()
result = converter.convert("report.pdf")

doc = result.document
print(doc.export_to_markdown())   # Markdown limpio
print(doc.export_to_dict())       # Diccionario JSON-able estructurado
MétodoRetorna
export_to_markdown()Markdown con encabezados/tablas preservados
export_to_dict()Modelo de documento estructurado (JSON-able)
export_to_doctags()Representación DocTags
result.documentEl DoclingDocument analizado

Entradas Soportadas

FormatoNotas
PDFMaquetación, tablas, orden de lectura; OCR para escaneos
DOCX / PPTX / XLSXFormatos Office
HTMLPáginas web y exportaciones
ImágenesPNG/JPG/TIFF vía OCR
Markdown / AsciiDocRe-estructurado en el modelo de documento

Chunking Consciente de Jerarquía

Los chunkers de Docling dividen un documento analizado para incrustación mientras mantienen contexto estructural (encabezados de sección, límites de tabla) en los metadatos de cada chunk.

from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker

doc = DocumentConverter().convert("report.pdf").document
chunker = HybridChunker(tokenizer="sentence-transformers/all-MiniLM-L6-v2")

for chunk in chunker.chunk(doc):
    print(chunk.text)
    print(chunk.meta)   # encabezados, página, procedencia
ChunkerComportamiento
HierarchicalChunkerDivide en estructura de documento (secciones, elementos)
HybridChunkerConsciente de estructura + consciente de tokenizador, dimensionamiento/fusión
chunk.metaLleva encabezados/procedencia para expansión de contexto

Integración de Marco RAG

MarcoCómo
LangChainDoclingLoader retorna documentos/chunks
LlamaIndexLector de Docling/analizador de nodos
PersonalizadoUsa export_to_markdown() o salida de chunker directamente
# Ejemplo de LangChain
from langchain_docling import DoclingLoader
docs = DoclingLoader(file_path="report.pdf").load()

Rendimiento y Opciones

OpciónPropósito
Motor OCRElige/desactiva OCR (EasyOCR, Tesseract, etc.)
Modo de tablaRecuperación precisa vs rápida de estructura de tabla
DispositivoEjecuta modelos en CPU o GPU
Rango de páginasLimita conversión a páginas específicas
Opciones de canalizaciónAfina la canalización de conversión por formato

Flujos de Trabajo Comunes

# Convierte una carpeta de PDFs a Markdown para ingestión
for f in docs/*.pdf; do docling --to md --output corpus/ "$f"; done
# Analiza → chunky → incrusta, el núcleo de ingestión RAG
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker

doc = DocumentConverter().convert("manual.pdf").document
chunks = list(HybridChunker().chunk(doc))
# incrusta cada chunk.text con tu modelo, almacena chunk.meta al lado

Docling vs Otros Analizadores

AspectoDoclingUnstructuredMarker
SalidaMarkdown + modelo estructuradoElementos tipadosMarkdown
ChunkingIntegrado, consciente de jerarquíaBasado en elementosExterno
VelocidadBuena (CPU)BuenaMás rápido con GPU
Mejor paraIngestión RAG autohospedadaCanalizaciones de elementos tipadosMarkdown de volumen con GPU

Recursos