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étodo | Comando |
|---|
| pip | pip install docling |
| uv | uv add docling |
| Con extras OCR | pip install "docling[ocr]" |
| Verificar | docling --version |
Uso de CLI
| Comando | Descripción |
|---|
docling document.pdf | Convierte un archivo a Markdown (predeterminado) |
docling --to json document.pdf | Salida JSON estructurada |
docling --to md --output out/ report.docx | Convierte a un directorio |
docling https://example.com/page.html | Convierte desde una URL |
docling --ocr scanned.pdf | Fuerza OCR para documentos escaneados |
docling --help | Lista 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étodo | Retorna |
|---|
export_to_markdown() | Markdown con encabezados/tablas preservados |
export_to_dict() | Modelo de documento estructurado (JSON-able) |
export_to_doctags() | Representación DocTags |
result.document | El DoclingDocument analizado |
Entradas Soportadas
| Formato | Notas |
|---|
| PDF | Maquetación, tablas, orden de lectura; OCR para escaneos |
| DOCX / PPTX / XLSX | Formatos Office |
| HTML | Páginas web y exportaciones |
| Imágenes | PNG/JPG/TIFF vía OCR |
| Markdown / AsciiDoc | Re-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
| Chunker | Comportamiento |
|---|
HierarchicalChunker | Divide en estructura de documento (secciones, elementos) |
HybridChunker | Consciente de estructura + consciente de tokenizador, dimensionamiento/fusión |
chunk.meta | Lleva encabezados/procedencia para expansión de contexto |
Integración de Marco RAG
| Marco | Cómo |
|---|
| LangChain | DoclingLoader retorna documentos/chunks |
| LlamaIndex | Lector de Docling/analizador de nodos |
| Personalizado | Usa 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ón | Propósito |
|---|
| Motor OCR | Elige/desactiva OCR (EasyOCR, Tesseract, etc.) |
| Modo de tabla | Recuperación precisa vs rápida de estructura de tabla |
| Dispositivo | Ejecuta modelos en CPU o GPU |
| Rango de páginas | Limita conversión a páginas específicas |
| Opciones de canalización | Afina 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
| Aspecto | Docling | Unstructured | Marker |
|---|
| Salida | Markdown + modelo estructurado | Elementos tipados | Markdown |
| Chunking | Integrado, consciente de jerarquía | Basado en elementos | Externo |
| Velocidad | Buena (CPU) | Buena | Más rápido con GPU |
| Mejor para | Ingestión RAG autohospedada | Canalizaciones de elementos tipados | Markdown de volumen con GPU |
Recursos