Docling - Dokumenten-Parsing für RAG Spickzettel
Docling ist ein Open-Source-Dokumenten-Parsing-Toolkit (ein LF AI & Data Projekt), das PDF, DOCX, PPTX, XLSX, HTML, Bilder und mehr in eine strukturierte Darstellung konvertiert — sauberes Markdown oder JSON, das Layout, Tabellen, Überschriften und Lesefolge bewahrt. Es enthält Hierarchie-bewusstes Chunking, das Chunks mit strukturellen Metadaten bereichert, und integriert sich direkt mit LangChain und LlamaIndex, was es zu einer der stärksten Open-Source-Optionen für die Ingestionsstufe einer RAG-Pipeline macht.
Installation
| Methode | Befehl |
|---|
| pip | pip install docling |
| uv | uv add docling |
| Mit OCR Extras | pip install "docling[ocr]" |
| Überprüfung | docling --version |
CLI-Verwendung
| Befehl | Beschreibung |
|---|
docling document.pdf | Datei in Markdown konvertieren (Standard) |
docling --to json document.pdf | Strukturiertes JSON ausgeben |
docling --to md --output out/ report.docx | In ein Verzeichnis konvertieren |
docling https://example.com/page.html | Von einer URL konvertieren |
docling --ocr scanned.pdf | OCR für gescannte Dokumente erzwingen |
docling --help | Vollständige Optionsliste |
Python: Grundlegende Konvertierung
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("report.pdf")
doc = result.document
print(doc.export_to_markdown()) # sauberes Markdown
print(doc.export_to_dict()) # strukturiertes JSON-fähiges Dict
| Methode | Gibt zurück |
|---|
export_to_markdown() | Markdown mit bewahrt Überschriften/Tabellen |
export_to_dict() | Strukturiertes Dokumentenmodell (JSON-fähig) |
export_to_doctags() | DocTags-Darstellung |
result.document | Das geparste DoclingDocument |
Unterstützte Eingaben
| Format | Notizen |
|---|
| PDF | Layout, Tabellen, Lesefolge; OCR für Scans |
| DOCX / PPTX / XLSX | Office-Formate |
| HTML | Webseiten und Exporte |
| Bilder | PNG/JPG/TIFF via OCR |
| Markdown / AsciiDoc | In das Dokumentenmodell restrukturiert |
Hierarchie-Bewusstes Chunking
Doclings Chunker splitten ein gepartes Dokument zum Einbetten, während sie strukturelle Kontexte (Abschnittsüberschriften, Tabellengrenzen) in den Metadaten jedes Chunks halten.
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) # Überschriften, Seite, Provenienz
| Chunker | Verhalten |
|---|
HierarchicalChunker | Auf Dokumentstruktur aufteilen (Abschnitte, Elemente) |
HybridChunker | Struktur-bewusst + Tokenizer-bewusste Größe/Zusammenführung |
chunk.meta | Trägt Überschriften/Provenienz für Kontexterweiterung |
RAG-Framework-Integration
| Framework | Wie |
|---|
| LangChain | DoclingLoader gibt Dokumente/Chunks zurück |
| LlamaIndex | Docling Reader/Node Parser |
| Custom | export_to_markdown() oder Chunker-Output direkt verwenden |
# LangChain Beispiel
from langchain_docling import DoclingLoader
docs = DoclingLoader(file_path="report.pdf").load()
| Option | Zweck |
|---|
| OCR Engine | OCR wählen/deaktivieren (EasyOCR, Tesseract, etc.) |
| Table Mode | Genaue vs. schnelle Tabellen-Struktur-Recovery |
| Device | Modelle auf CPU oder GPU ausführen |
| Page Range | Konvertierung auf spezifische Seiten begrenzen |
| Pipeline Options | Pro Format Konvertierungs-Pipeline abstimmen |
Häufige Workflows
# PDFs-Ordner in Markdown für Ingestion konvertieren
for f in docs/*.pdf; do docling --to md --output corpus/ "$f"; done
# Parse → Chunk → Embed, der RAG Ingestions-Kern
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
doc = DocumentConverter().convert("manual.pdf").document
chunks = list(HybridChunker().chunk(doc))
# jeden chunk.text mit deinem Modell einbetten, chunk.meta daneben speichern
Docling vs Andere Parser
| Aspekt | Docling | Unstructured | Marker |
|---|
| Output | Markdown + strukturiertes Modell | Typisierte Elemente | Markdown |
| Chunking | Eingebaut, Hierarchie-bewusst | Element-basiert | Extern |
| Geschwindigkeit | Gut (CPU) | Gut | Schnellste mit GPU |
| Am besten für | Self-Hosted RAG Ingestion | Typisierte Element Pipelines | GPU Bulk Markdown |
Ressourcen