Aller au contenu

Docling - Analyse de documents pour RAG

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éthodeCommande
pippip install docling
uvuv add docling
Avec extras OCRpip install "docling[ocr]"
Vérifierdocling --version

Utilisation de la CLI

CommandeDescription
docling document.pdfConvertir un fichier en Markdown (défaut)
docling --to json document.pdfSortie JSON structurée
docling --to md --output out/ report.docxConvertir vers un répertoire
docling https://example.com/page.htmlConvertir depuis une URL
docling --ocr scanned.pdfForcer OCR pour les documents numérisés
docling --helpListe 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éthodeRetourne
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.documentLe DoclingDocument analysé

Entrées supportées

FormatNotes
PDFMise en page, tableaux, ordre de lecture; OCR pour les numérisations
DOCX / PPTX / XLSXFormats Office
HTMLPages Web et exports
ImagesPNG/JPG/TIFF via OCR
Markdown / AsciiDocRestructuré 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
ChunkerComportement
HierarchicalChunkerDiviser sur la structure du document (sections, éléments)
HybridChunkerStructure-conscient + dimensionnement/fusion conscient du tokenizer
chunk.metaPorte les en-têtes/provenance pour l”expansion du contexte

Intégration du framework RAG

FrameworkComment
LangChainDoclingLoader retourne les documents/chunks
LlamaIndexLecteur 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()

Performance et options

OptionBut
Moteur OCRChoisir/désactiver OCR (EasyOCR, Tesseract, etc.)
Mode tableauRécupération de structure de tableau précise vs rapide
DeviceExécuter les modèles sur CPU ou GPU
Plage de pagesLimiter la conversion à des pages spécifiques
Options de pipelineAffiner 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

AspectDoclingUnstructuredMarker
SortieMarkdown + modèle structuréÉléments typésMarkdown
ChunkingIntégré, conscient de la hiérarchieBasé sur élémentExterne
VitesseBonne (CPU)BonneLa plus rapide avec GPU
Meilleur pourIngestion RAG auto-hébergéePipelines d”éléments typésMarkdown GPU en volume

Ressources