Aller au contenu
RAG

Ingestion : parsing, OCR, métadonnées, synchronisation

Transformer les PDF, Word, Excel, mails et scans d'un cabinet en texte structuré et étiqueté (dossier, ACL, page), puis le maintenir à jour et supprimer proprement.

Hypothèse#rag#ocr#documents#doclingPublié le 16 sept. 2026Mis à jour le 16 sept. 2026Vérifié le 16 sept. 2026À revérifier le 15 déc. 2026

L'essentiel

  • Un cabinet produit des PDF natifs, des PDF scannés, des documents Word et Excel, des mails (souvent .msg ou .pst) et des images de pièces. Le parseur doit couvrir tout cela en local, sans envoyer un octet à l'extérieur.
  • Docling (MIT, IBM Research) est le candidat principal : mise en page, tableaux, OCR, export structuré, chunking natif, « air-gapped » 1. Unstructured et Tika servent de filet pour les formats exotiques.
  • Plusieurs outils réputés ont des licences piégeuses pour une entité commerciale : PyMuPDF (AGPL ou commercial), Marker (poids non libres au-delà de 5 M$ de revenus), MinerU (licence custom), Nougat (poids CC BY-NC), extract-msg (GPL v3). À lire avant d'installer.
  • Chaque document ingéré porte ses métadonnées (dossier, client, date, type, page) et ses droits d'accès, copiés sur chaque chunk : sans cela, le filtre de permissions est impossible.
  • La synchronisation est incrémentale (hash du fichier) et la suppression d'un document supprime tous ses chunks et vecteurs ; ces deux mécanismes sont testés, pas supposés.

Ce qu'il faut extraire, et pourquoi c'est difficile

Un acte, une assignation, un contrat ou un jugement ont une structure (titres, articles, clauses, pieds de page répétés, numéros de page) que la recherche doit exploiter et que la citation doit restituer (« pièce 12, p. 4 »). Trois difficultés reviennent :

  1. Les scans : une part importante des pièces arrive en PDF image (courriers reçus, pièces adverses). Sans OCR, elles n'existent pas pour le RAG.
  2. Les tableaux : bordereaux, décomptes, échéanciers. Un extracteur qui linéarise un tableau ligne par ligne produit des chunks inutilisables.
  3. Les mails : le corps, les pièces jointes, le fil de réponses cité. Un .pst de plusieurs gigaoctets contient des milliers de messages et de pièces jointes à rattacher au bon dossier.

Outils de parsing et d'OCR

OutilLicencePoints fortsRéservesSource
Docling (IBM, LF AI & Data)MITPDF, DOCX, PPTX, XLSX, HTML, images ; layout + tableaux ; OCR multiples ; export Markdown/JSON/DocTags ; HybridChunker ; exécution localequalité sur le juridique français à mesurer1
UnstructuredApache 2.060+ formats dont e-mails ; stratégies fast / hi_res / ocr_onlyfonctions avancées « reserved for the commercial Unstructured Pipelines platform » ; dépendances système lourdes2
Apache Tika 3.xApache 2.0plus de 1 000 formats ; défaut proposé par Open WebUIpas de structure de mise en page10
PyMuPDF / pymupdf4llmAGPL-3.0 ou commercialextraction très rapide, OCR Tesseract intégréAGPL à analyser pour une Box distribuée5
pdfplumberMITtableaux dans les PDF natifspas d'OCR
Marker (Datalab)code Apache 2.0 (lecture actuelle) ; poids « Modified AI2 Open RAIL-M », gratuits sous 5 M$ de revenusOCR Surya, bons benchmarks éditeuréligibilité d'un cabinet à vérifier ; historique GPL-3.03
MinerU (OpenDataLab)licence custom (ex-AGPL)OCR 109 langues, mise en pageGPU 4 à 8 Go VRAM minimum, CUDA à vérifier sur AMD ; conditions à lire4
Nougat (Meta)code MIT, poids CC BY-NCdocuments académiquesnon commercial, hors cible6
Tesseract 5Apache 2.0fra.traineddata, CPU, matureprécision variable sur scans médiocres7
PaddleOCR 3.0Apache 2.0détection de mise en pagecompatibilité ROCm non vérifiée8
OCRmyPDFMPL-2.0ajoute une couche texte aux PDF scannés, conserve l'imagedépend de Tesseract et Ghostscript9
RAGFlow DeepDocApache 2.0layout, OCR, tableaux intégrés à la plateformelié à RAGFlow (Elasticsearch, MySQL, Redis, MinIO)15

Chaîne recommandée (hypothèse)

  1. Détection : PDF natif (texte présent) ou scanné (pas de couche texte, ou couche texte vide).
  2. Pré-OCR des scans avec OCRmyPDF + Tesseract fra (ou fra+eng pour les dossiers internationaux) : le PDF garde son image et gagne une couche texte réutilisable par n'importe quel outil, y compris le lecteur PDF de l'avocat 9.
  3. Parsing avec Docling : structure (titres, paragraphes, listes), tableaux, numéros de page, coordonnées des blocs (pour surligner le passage cité) 1.
  4. Secours : Tika ou Unstructured pour un format que Docling refuse.
  5. Contrôle qualité : taux de caractères non alphabétiques, longueur moyenne des mots, pages vides ; un document sous le seuil est marqué « OCR douteux » et remonté à l'utilisateur plutôt qu'indexé silencieusement.

PaddleOCR est à comparer à Tesseract sur les scans difficiles ; les deux tournent sur CPU, ce qui compte sur la machine candidate où le GPU est réservé au LLM.

Formats de messagerie

FormatOutilLicenceRemarques
.eml (MIME)module email de Python ; Tika ; UnstructuredPSF / Apache 2.0format cible : tout le reste y est converti
.msg (Outlook)extract-msgGPL v3 12à isoler dans un processus de conversion vers .eml
.pst (archives Outlook)libratom (Python, libpff) : un .eml par message 11 ; pffexportlibpff : à confirmerarchives volumineuses ; les pièces jointes deviennent des documents à part, rattachés au même dossier

Métadonnées spécifiques aux mails : expéditeur, destinataires, date, sujet, identifiant de fil (Message-ID, In-Reply-To), pièce jointe parente. Le rattachement au dossier se fait par convention (sous-dossier Outlook exporté par affaire) ou par règle (adresse du client, référence dans l'objet) ; les mails non rattachés vont dans une zone de quarantaine visible du seul propriétaire.

Nettoyage

Avant chunking : supprimer les en-têtes et pieds de page répétés (détectés par répétition sur plusieurs pages), les numéros de page isolés, les lignes de signature de mail, les avertissements de confidentialité répétés ; normaliser les espaces et les apostrophes ; conserver les numéros d'articles et de clauses, qui sont des ancres de citation. Dédoublonner par hash de contenu (la même pièce est souvent présente trois fois dans un dossier : originale, scan, pièce jointe d'un mail) tout en gardant tous les chemins pour la citation.

Métadonnées

Chaque document, puis chaque chunk, porte :

ChampExempleOrigine
doc_id, chunk_idUUIDpipeline
dossier_id, client_id2026-0042, client-…chemin SMB, SharePoint, ou choix à l'import
acl_groups["associes", "avocat-a"]ACL source ou table de la Box, voir permissions
typecontrat, jugement, courrier, mail, piècerègle ou classification légère
date_document, date_ingestionmétadonnées fichier, contenu, pipeline
chemin, nom_fichier, hashsystème de fichiers
page_debut, page_fin, bboxDocling
section« Article 4 — Prix »structure Docling
languefrdétection
ocrtrue/false, score qualitépipeline

Le champ acl_groups est dupliqué sur chaque chunk à dessein : Azure AI Search documente que les champs de permission suivent les fragments quand le document est découpé 13. Cette dénormalisation impose que la resynchronisation des ACL réécrive les métadonnées de tous les chunks concernés.

Synchronisation incrémentale

Le connecteur (voir documents) parcourt les sources à intervalle régulier et compare chemin + taille + mtime + hash. Trois cas :

  • Nouveau ou modifié : réingestion complète du document (parsing, chunking, embeddings), remplacement atomique des anciens chunks par les nouveaux, puis mise à jour des ACL.
  • Déplacé (même hash, autre chemin) : mise à jour des métadonnées ; si le déplacement change de dossier, les ACL changent aussi, ce qui est un événement de sécurité à journaliser.
  • Supprimé : suppression de tous les chunks, vecteurs et entrées BM25, puis du journal d'ingestion (le journal d'accès est conservé selon sa propre durée).

L'état d'avancement (documents en attente, échecs d'OCR, dernier passage) est exposé au monitoring ; un document en échec est visible dans l'interface d'administration avec sa raison.

Comparaison avec le RAG intégré d'Open WebUI

Open WebUI propose Tika, Docling ou Mistral OCR comme moteur d'extraction et un splitter par caractères ou tokens 14. Cela suffit pour un POC sur quelques documents déposés à la main. Cela ne couvre pas : la synchronisation depuis un partage, la propagation des ACL, le rattachement des mails aux dossiers, le contrôle qualité OCR. C'est l'un des arguments pour un service d'ingestion séparé dès le POC (interface).

Questions ouvertes

Ce qu'il reste à tester

Sources

  1. 1Docling — README et documentation chunking (MIT, HybridChunker)GitHubFiabilité hauteDocling / IBM Research / LF AI & Data · publié v2.127.0, 14/09/2026 · consulté le 16 sept. 2026 · fiche source
  2. 2Unstructured — README (Apache 2.0, stratégies, limites open source)GitHubFiabilité hauteUnstructured · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
  3. 3Marker — README (licence code et poids des modèles)GitHubFiabilité moyenneDatalab · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
  4. 4MinerU — README (licence custom, prérequis GPU)GitHubFiabilité moyenneOpenDataLab · publié v3.4, 18/06/2026 · consulté le 16 sept. 2026 · fiche source
  5. 5PyMuPDF — licence AGPL-3.0 ou commercialeDocumentation officielleFiabilité hauteArtifex · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
  6. 6Nougat (Meta) — code MIT, poids CC BY-NCGitHubFiabilité hauteMeta · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
  7. 7Tesseract — tessdata_best (Apache 2.0, fra.traineddata)GitHubFiabilité hauteTesseract OCR · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
  8. 8PaddleOCR 3.0 — rapport technique et licenceÉtudeFiabilité moyennePaddlePaddle · publié juillet 2025 · consulté le 16 sept. 2026 · fiche source
  9. 9OCRmyPDF — licence MPL-2.0GitHubFiabilité hauteOCRmyPDF · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
  10. 10Apache Tika 3.x — licence et formatsDocumentation officielleFiabilité hauteApache Software Foundation · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
  11. 11libratom — extraction PST / mbox (libpff)GitHubFiabilité moyenneLibratom · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
  12. 12extract-msg — parsing .msg (GPL v3)Documentation officielleFiabilité hautePyPI (extract-msg) · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
  13. 13Azure AI Search — Document-Level Access ControlDocumentation officielleFiabilité hauteMicrosoft · publié 08/08/2026 (mise à jour 31/08/2026) · consulté le 16 sept. 2026 · fiche source
  14. 14Open WebUI — fonctions RAG (knowledge, hybride, extraction)Documentation officielleFiabilité hauteOpen WebUI · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
  15. 15RAGFlow — README (Apache 2.0, DeepDoc, prérequis)GitHubFiabilité hauteInfiniFlow · publié v0.27.2, lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
content/docs/rag/ingestion.md1588 mots