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
| Metodo | Comando |
|---|
| pip | pip install docling |
| uv | uv add docling |
| Con OCR extras | pip install "docling[ocr]" |
| Verifica | docling --version |
Utilizzo CLI
| Comando | Descrizione |
|---|
docling document.pdf | Converti un file a Markdown (default) |
docling --to json document.pdf | Output JSON strutturato |
docling --to md --output out/ report.docx | Converti a una directory |
docling https://example.com/page.html | Converti da un URL |
docling --ocr scanned.pdf | Forza OCR per documenti scansionati |
docling --help | Elenco 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
| Metodo | Ritorna |
|---|
export_to_markdown() | Markdown con intestazioni/tabelle preservate |
export_to_dict() | Modello di documento strutturato (JSON-able) |
export_to_doctags() | Rappresentazione DocTags |
result.document | Il DoclingDocument parsato |
| Formato | Note |
|---|
| PDF | Layout, tabelle, ordine di lettura; OCR per scansioni |
| DOCX / PPTX / XLSX | Formati Office |
| HTML | Pagine web ed export |
| Immagini | PNG/JPG/TIFF via OCR |
| Markdown / AsciiDoc | Ristrutturati 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
| Chunker | Comportamento |
|---|
HierarchicalChunker | Dividi sulla struttura del documento (sezioni, elementi) |
HybridChunker | Consapevolezza della struttura + dimensionamento consapevole del tokenizer/merge |
chunk.meta | Trasporta intestazioni/provenienza per espansione del contesto |
Integrazione Framework RAG
| Framework | Come |
|---|
| LangChain | DoclingLoader ritorna documenti/chunk |
| LlamaIndex | Lettore Docling/parser di nodi |
| Custom | Usa export_to_markdown() o output chunker direttamente |
# Esempio LangChain
from langchain_docling import DoclingLoader
docs = DoclingLoader(file_path="report.pdf").load()
| Opzione | Scopo |
|---|
| OCR engine | Scegli/disabilita OCR (EasyOCR, Tesseract, ecc.) |
| Table mode | Recupero accurato della struttura della tabella vs veloce |
| Device | Esegui modelli su CPU o GPU |
| Page range | Limita la conversione a pagine specifiche |
| Pipeline options | Sintonizza 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
| Aspetto | Docling | Unstructured | Marker |
|---|
| Output | Markdown + modello strutturato | Elementi tipizzati | Markdown |
| Chunking | Built-in, consapevole della gerarchia | Basato su elemento | Esterno |
| Velocità | Buona (CPU) | Buona | Più veloce con GPU |
| Migliore per | Ingestione RAG self-hosted | Pipeline di elementi tipizzati | Markdown di volume su GPU |
Risorse