Docling - Analyse de documents pour RAG
Docling est un kit d”outils open-source d”analyse de documents (un projet LF AI & Data) qui convertit PDF, DOCX, PPTX, XLSX, HTML, images, et bien d”autres formats en une représentation structurée — Markdown ou JSON propre qui préserve la mise en page, les tableaux, les en-têtes et l”ordre de lecture. Il inclut le chunking conscient de la hiérarchie qui enrichit les chunks avec les métadonnées structurelles, et il s”intègre directement avec LangChain et LlamaIndex, ce qui en fait l”un des meilleurs choix open-source pour l”étape d”ingestion d”un pipeline RAG.
Installation
| Méthode | Commande |
|---|
| pip | pip install docling |
| uv | uv add docling |
| Avec extras OCR | pip install "docling[ocr]" |
| Vérifier | docling --version |
Utilisation de la CLI
| Commande | Description |
|---|
docling document.pdf | Convertir un fichier en Markdown (défaut) |
docling --to json document.pdf | Sortie JSON structurée |
docling --to md --output out/ report.docx | Convertir vers un répertoire |
docling https://example.com/page.html | Convertir depuis une URL |
docling --ocr scanned.pdf | Forcer OCR pour les documents numérisés |
docling --help | Liste complète des options |
Python: Conversion de base
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("report.pdf")
doc = result.document
print(doc.export_to_markdown()) # Markdown propre
print(doc.export_to_dict()) # Dict JSON-able structuré
| Méthode | Retourne |
|---|
export_to_markdown() | Markdown avec en-têtes/tableaux préservés |
export_to_dict() | Modèle de document structuré (JSON-able) |
export_to_doctags() | Représentation DocTags |
result.document | Le DoclingDocument analysé |
Entrées supportées
| Format | Notes |
|---|
| PDF | Mise en page, tableaux, ordre de lecture; OCR pour les numérisations |
| DOCX / PPTX / XLSX | Formats Office |
| HTML | Pages Web et exports |
| Images | PNG/JPG/TIFF via OCR |
| Markdown / AsciiDoc | Restructuré en modèle de document |
Chunking conscient de la hiérarchie
Les chunkers de Docling divisent un document analysé pour l”intégration tout en conservant le contexte structurel (en-têtes de section, limites de tableau) dans les métadonnées de chaque 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) # en-têtes, page, provenance
| Chunker | Comportement |
|---|
HierarchicalChunker | Diviser sur la structure du document (sections, éléments) |
HybridChunker | Structure-conscient + dimensionnement/fusion conscient du tokenizer |
chunk.meta | Porte les en-têtes/provenance pour l”expansion du contexte |
Intégration du framework RAG
| Framework | Comment |
|---|
| LangChain | DoclingLoader retourne les documents/chunks |
| LlamaIndex | Lecteur Docling/analyseur de nœuds |
| Personnalisé | Utiliser directement export_to_markdown() ou la sortie du chunker |
# Exemple LangChain
from langchain_docling import DoclingLoader
docs = DoclingLoader(file_path="report.pdf").load()
| Option | But |
|---|
| Moteur OCR | Choisir/désactiver OCR (EasyOCR, Tesseract, etc.) |
| Mode tableau | Récupération de structure de tableau précise vs rapide |
| Device | Exécuter les modèles sur CPU ou GPU |
| Plage de pages | Limiter la conversion à des pages spécifiques |
| Options de pipeline | Affiner le pipeline de conversion par format |
Flux de travail courants
# Convertir un dossier de PDFs en Markdown pour l'ingestion
for f in docs/*.pdf; do docling --to md --output corpus/ "$f"; done
# Analyser → chunker → intégrer, le cœur de l'ingestion RAG
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
doc = DocumentConverter().convert("manual.pdf").document
chunks = list(HybridChunker().chunk(doc))
# intégrer chaque chunk.text avec votre modèle, stocker chunk.meta à côté
Docling vs Autres analyseurs
| Aspect | Docling | Unstructured | Marker |
|---|
| Sortie | Markdown + modèle structuré | Éléments typés | Markdown |
| Chunking | Intégré, conscient de la hiérarchie | Basé sur élément | Externe |
| Vitesse | Bonne (CPU) | Bonne | La plus rapide avec GPU |
| Meilleur pour | Ingestion RAG auto-hébergée | Pipelines d”éléments typés | Markdown GPU en volume |
Ressources