Salta ai contenuti

Docling - Cheatsheet Document Parsing per RAG

Docling - Cheatsheet Document Parsing per RAG

Docling è un toolkit open-source di document parsing (un progetto LF AI & Data) che converte PDF, DOCX, PPTX, XLSX, HTML, immagini e altro in una rappresentazione strutturata — Markdown pulito o JSON che preserva layout, tabelle, intestazioni e ordine di lettura. Include chunking consapevole della gerarchia che arricchisce i chunk con metadati strutturali, e si integra direttamente con LangChain e LlamaIndex, il che lo rende una delle scelte open-source più forti per lo stage di ingestione di una pipeline RAG.

Installazione

MetodoComando
pippip install docling
uvuv add docling
Con OCR extraspip install "docling[ocr]"
Verificadocling --version

Utilizzo CLI

ComandoDescrizione
docling document.pdfConverti un file a Markdown (default)
docling --to json document.pdfOutput JSON strutturato
docling --to md --output out/ report.docxConverti a una directory
docling https://example.com/page.htmlConverti da un URL
docling --ocr scanned.pdfForza OCR per documenti scansionati
docling --helpElenco completo delle opzioni

Python: Conversione di Base

from docling.document_converter import DocumentConverter

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

doc = result.document
print(doc.export_to_markdown())   # Markdown pulito
print(doc.export_to_dict())       # dict JSON-able strutturato
MetodoRitorna
export_to_markdown()Markdown con intestazioni/tabelle preservate
export_to_dict()Modello di documento strutturato (JSON-able)
export_to_doctags()Rappresentazione DocTags
result.documentIl DoclingDocument parsato

Input Supportati

FormatoNote
PDFLayout, tabelle, ordine di lettura; OCR per scansioni
DOCX / PPTX / XLSXFormati Office
HTMLPagine web ed export
ImmaginiPNG/JPG/TIFF via OCR
Markdown / AsciiDocRistrutturati nel modello di documento

Chunking Consapevole della Gerarchia

I chunker di Docling dividono un documento parsato per l”embedding mantenendo il contesto strutturale (intestazioni di sezione, limiti di tabella) nel metadato di ogni 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)   # intestazioni, pagina, provenienza
ChunkerComportamento
HierarchicalChunkerDividi sulla struttura del documento (sezioni, elementi)
HybridChunkerConsapevolezza della struttura + dimensionamento consapevole del tokenizer/merge
chunk.metaTrasporta intestazioni/provenienza per espansione del contesto

Integrazione Framework RAG

FrameworkCome
LangChainDoclingLoader ritorna documenti/chunk
LlamaIndexLettore Docling/parser di nodi
CustomUsa export_to_markdown() o output chunker direttamente
# Esempio LangChain
from langchain_docling import DoclingLoader
docs = DoclingLoader(file_path="report.pdf").load()

Performance & Opzioni

OpzioneScopo
OCR engineScegli/disabilita OCR (EasyOCR, Tesseract, ecc.)
Table modeRecupero accurato della struttura della tabella vs veloce
DeviceEsegui modelli su CPU o GPU
Page rangeLimita la conversione a pagine specifiche
Pipeline optionsSintonizza la pipeline di conversione per formato

Flussi di Lavoro Comuni

# Converti una cartella di PDF a Markdown per l''ingestione
for f in docs/*.pdf; do docling --to md --output corpus/ "$f"; done
# Parse → chunk → embed, il core di ingestione RAG
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker

doc = DocumentConverter().convert("manual.pdf").document
chunks = list(HybridChunker().chunk(doc))
# embed ogni chunk.text con il tuo modello, archivia chunk.meta insieme

Docling vs Altri Parser

AspettoDoclingUnstructuredMarker
OutputMarkdown + modello strutturatoElementi tipizzatiMarkdown
ChunkingBuilt-in, consapevole della gerarchiaBasato su elementoEsterno
VelocitàBuona (CPU)BuonaPiù veloce con GPU
Migliore perIngestione RAG self-hostedPipeline di elementi tipizzatiMarkdown di volume su GPU

Risorse