Introduction
Les pipelines Document AI permettent d'automatiser l'extraction d'informations à partir de documents non structurés comme les PDF, factures ou contrats. En 2026, ils combinent OCR moderne, modèles de langage et orchestration pour des résultats fiables. Ce tutoriel vous guide pas à pas dans la construction d'un pipeline complet, depuis l'ingestion jusqu'à l'export structuré. Vous apprendrez à gérer les erreurs, optimiser les performances et intégrer des composants IA réutilisables.
Prérequis
- Python 3.11 ou supérieur
- Connaissances intermédiaires en Python et Pydantic
- Compte Google Cloud (optionnel pour Document AI)
- Connaissance de base des formats PDF et JSON
Installation des dépendances
pip install pymupdf pytesseract pillow pydantic python-dotenv
pip install google-cloud-documentaiCes packages fournissent la manipulation PDF, l'OCR et la validation de données. google-cloud-documentai est inclus pour une utilisation réelle avec l'API Google.
Modèle de données Pydantic
from pydantic import BaseModel, Field
from typing import List, Optional
class ExtractedField(BaseModel):
key: str
value: str
confidence: float = Field(ge=0.0, le=1.0)
class DocumentResult(BaseModel):
document_id: str
extracted_fields: List[ExtractedField]
raw_text: strCe modèle garantit que les sorties du pipeline sont toujours structurées et validées automatiquement.
Module d'ingestion PDF
import fitz
from pathlib import Path
def extract_text_from_pdf(pdf_path: Path) -> str:
doc = fitz.open(pdf_path)
text = ""
for page in doc:
text += page.get_text()
doc.close()
return text.strip()Utilise PyMuPDF pour extraire le texte brut rapidement. Gère les documents multi-pages sans charger tout en mémoire.
Composant OCR
import pytesseract
from PIL import Image
import fitz
def ocr_pdf_page(pdf_path: str, page_num: int = 0) -> str:
doc = fitz.open(pdf_path)
page = doc[page_num]
pix = page.get_pixmap(dpi=300)
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
text = pytesseract.image_to_string(img, lang='fra')
doc.close()
return textConvertit la page en image haute résolution puis applique Tesseract en français. Idéal pour les documents scannés.
Pipeline principal
from ingestion import extract_text_from_pdf
from ocr import ocr_pdf_page
from models import DocumentResult, ExtractedField
def run_document_pipeline(pdf_path: str, use_ocr: bool = False) -> DocumentResult:
if use_ocr:
raw = ocr_pdf_page(pdf_path)
else:
raw = extract_text_from_pdf(pdf_path)
# Extraction simplifiée (à remplacer par LLM)
fields = [ExtractedField(key="client", value="Exemple SA", confidence=0.92)]
return DocumentResult(document_id=pdf_path, extracted_fields=fields, raw_text=raw)Orchestre les étapes d'ingestion et d'extraction. Le flag use_ocr permet de basculer facilement entre texte natif et OCR.
Bonnes pratiques
- Toujours valider les données avec Pydantic
- Utiliser des flags pour activer/désactiver l'OCR
- Logger chaque étape avec des métadonnées
- Versionner les prompts et modèles utilisés
- Tester avec des documents réels et bruités
Erreurs courantes à éviter
- Oublier de gérer les exceptions lors de l'ouverture de PDF corrompus
- Ne pas normaliser le texte avant l'extraction IA
- Ignorer les scores de confiance des modèles
- Exécuter l'OCR sur tous les documents sans vérifier si le texte natif existe
Pour aller plus loin
Découvrez nos formations avancées sur l'IA documentaire et l'orchestration de pipelines chez Learni.