Pular para o conteúdo

Docling - Análise de Documentos para RAG

Docling - Análise de Documentos para RAG

Docling é um toolkit de análise de documentos de código aberto (um projeto LF AI & Data) que converte PDF, DOCX, PPTX, XLSX, HTML, imagens e muito mais em uma representação estruturada — Markdown limpo ou JSON que preserva layout, tabelas, cabeçalhos e ordem de leitura. Inclui chunking ciente de hierarquia que enriquece chunks com metadados estruturais, e se integra diretamente com LangChain e LlamaIndex, o que o torna uma das melhores escolhas de código aberto para o estágio de ingestão de um pipeline de RAG.

Instalação

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

Uso da CLI

ComandoDescrição
docling document.pdfConverta um arquivo para Markdown (padrão)
docling --to json document.pdfSaída JSON estruturada
docling --to md --output out/ report.docxConverta para um diretório
docling https://example.com/page.htmlConverta de uma URL
docling --ocr scanned.pdfForce OCR para documentos digitalizados
docling --helpLista completa de opções

Python: Conversão Básica

from docling.document_converter import DocumentConverter

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

doc = result.document
print(doc.export_to_markdown())   # Markdown limpo
print(doc.export_to_dict())       # dicionário estruturado em JSON
MétodoRetorna
export_to_markdown()Markdown com cabeçalhos/tabelas preservadas
export_to_dict()Modelo de documento estruturado (JSON-compatível)
export_to_doctags()Representação DocTags
result.documentO DoclingDocument parseado

Entradas Suportadas

FormatoNotas
PDFLayout, tabelas, ordem de leitura; OCR para digitalizações
DOCX / PPTX / XLSXFormatos Office
HTMLPáginas da web e exportações
ImagensPNG/JPG/TIFF via OCR
Markdown / AsciiDocReestruturado no modelo de documento

Chunking Ciente de Hierarquia

Os chunkers do Docling dividem um documento parseado para embedding enquanto mantêm contexto estrutural (cabeçalhos de seção, limites de tabelas) nos metadados 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)   # cabeçalhos, página, proveniência
ChunkerComportamento
HierarchicalChunkerDivida em estrutura de documento (seções, itens)
HybridChunkerCiente de estrutura + dimensionamento ciente de tokenizer/mesclagem
chunk.metaCarrega cabeçalhos/proveniência para expansão de contexto

Integração com Framework de RAG

FrameworkComo
LangChainDoclingLoader retorna documentos/chunks
LlamaIndexLeitor Docling/analisador de nó
PersonalizadoUse export_to_markdown() ou saída de chunker diretamente
# Exemplo LangChain
from langchain_docling import DoclingLoader
docs = DoclingLoader(file_path="report.pdf").load()

Desempenho e Opções

OpçãoPropósito
Engine de OCREscolha/desabilite OCR (EasyOCR, Tesseract, etc.)
Modo de tabelaRecuperação de estrutura de tabela precisa vs rápida
DeviceExecute modelos em CPU ou GPU
Intervalo de páginaLimite conversão para páginas específicas
Opções de pipelineAjuste o pipeline de conversão por formato

Fluxos de Trabalho Comuns

# Converta uma pasta de PDFs para Markdown para ingestão
for f in docs/*.pdf; do docling --to md --output corpus/ "$f"; done
# Parse → chunk → embed, o núcleo de ingestão de RAG
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker

doc = DocumentConverter().convert("manual.pdf").document
chunks = list(HybridChunker().chunk(doc))
# embed cada chunk.text com seu modelo, armazene chunk.meta ao lado

Docling vs Outros Analisadores

AspectoDoclingUnstructuredMarker
SaídaMarkdown + modelo estruturadoElementos tipadosMarkdown
ChunkingConstruído, ciente de hierarquiaBaseado em elementoExterno
VelocidadeBom (CPU)BomMais rápido com GPU
Melhor paraIngestão de RAG auto-hospedadoPipelines de elementos tipadosMarkdown em massa com GPU

Recursos