IAHDF
Tutoriel

RAG sur des PDF scannés : ajouter l'OCR avant l'indexation

ÉI Équipe IAHDF 20 min de lecture Mis à jour le 27 septembre 2026 Avancé

Beaucoup d’archives municipales, de délibérations et de dossiers associatifs en Hauts-de-France existent surtout en PDF scannés. Sans OCR, votre RAG indexe du vide : l’assistant répond à côté ou invente. Ce tutoriel suit le chemin complet — détecter le scan, extraire le texte, contrôler la qualité, puis brancher le résultat sur votre pipeline d’indexation — avec des commandes de principe et des gestes de vérification que vous pourrez refaire sur un lot réel.

Plan du tutoriel

Huit repères : (1) pourquoi le scan casse le RAG, (2) détecter l’absence de texte, (3) choisir un outil d’OCR, (4) pipeline de principe, (5) qualité et pièges français, (6) intégration vers Open WebUI ou un index vectoriel, (7) scène archives à Arras, (8) checklist avant production. Pour les réglages RAG une fois le texte propre, croisez RAG dans Open WebUI. Pour savoir si les réponses tiennent, évaluer la qualité du RAG. Le glossaire RAG rappelle le principe recherche puis rédaction.

Le problème : le RAG ne « voit » pas l’image

Un système RAG classique découpe du texte, calcule des embeddings, récupère des passages, puis demande à un modèle de rédiger. Si votre fichier est un scan sans couche texte, l’extracteur renvoie une chaîne vide ou des caractères parasites. L’index est creux. La question d’un agent municipal (« Quelle était la décision sur le stationnement rue X ? ») tombe dans le vide : le modèle invente, ou répond qu’il ne sait pas, sans que vous ayez compris que le document n’a jamais été lu.

En Hauts-de-France, le cas est fréquent : délibérations scannées des années 1990-2010, dossiers d’urbanisme photographiés, PV d’associations numérisés à la va-vite. Le geste utile n’est pas « ajouter plus de GPU ». C’est d’abord de produire un texte fidèle, page par page, avant toute indexation. Sans cette étape, vous optimisez un moteur qui cherche dans du silence.

Détecter les scans dans un lot

Avant d’OCRiser tout un serveur, classez. Un script ou un outil d’extraction (pdftotext, une bibliothèque Python de lecture PDF) vous dit si une page renvoie du texte utile. Fixez un seuil pragmatique : peu de caractères alphabétiques par page, ou ratio image/texte élevé, et la page part en file OCR. Gardez une liste des fichiers traités, des refus, et des pages douteuses. Ce journal évite de relancer dix fois le même lot.

Côté matériel, l’OCR classique (Tesseract) tourne souvent correctement sur CPU pour des volumes modestes. Les approches plus lourdes (Docling, modèles de vision) demandent davantage de ressources : parlez en ordre de grandeur et testez sur dix pages avant de lancer une nuit complète. IAHDF ne publie pas de mesure VRAM de laboratoire : lisez la fiche de l’outil le jour J.

Choisir l’outil d’OCR

Tesseract / ocrmypdf

Piste stable pour produire un PDF avec couche texte, surtout en français avec le paquet de langue adapté.

  • Commandes de principe documentées depuis longtemps ; vérifiez la version installée.
  • Bon réflexe pour archives administratives et scans propres.
  • Limites sur mises en page très complexes ou écriture manuscrite.

Docling et pipelines structurés

Utile quand vous voulez plus qu’une couche texte : structure, tableaux, enchaînement vers un index.

  • Lisez la doc officielle pour l’installation et les options du jour.
  • Testez sur un échantillon représentatif de vos archives HdF.
  • Ne supposez pas une qualité magique sur tout type de scan.

OCR par modèle de vision

Parfois pertinent pour pages difficiles, mais plus coûteux en machine et plus délicat à auditer.

  • Copiez le tag du modèle depuis la doc officielle (Ollama, Hugging Face…) le jour J.
  • Comparez toujours avec un OCR classique sur les mêmes pages.
  • Gardez une relecture humaine sur les passages sensibles.

Pipeline : de l’image au texte indexable

Six étapes du scan à l’index

1

Inventorier et copier hors production

Réunissez un lot représentatif : quelques délibérations, un règlement scanné, un courrier administratif. Travaillez sur des copies, jamais sur l’unique original numérique. Retirez les pages qui contiennent des données personnelles inutiles au test. Notez provenance, date approximative et qualité visuelle (contraste, biais, tampon). Ce dossier d’essai servira aussi pour l’évaluation du RAG plus tard. Sans inventaire, vous ne saurez pas pourquoi une réponse a échoué. Classez aussi les fichiers refusés pour OCR dans un sous-dossier dédié, afin de ne pas les réinjecter par erreur lors d’un prochain lot nocturne sur les archives municipales.

2

Mesurer l’extractibilité avant OCR

Passez un extracteur de texte naïf sur chaque fichier. Classez « déjà texte », « mixte », « image pure ». Pour les mixtes, décidez page par page : inutile d’OCRiser une page déjà textuelle si cela dégrade la couche existante. Documentez la règle dans un fichier README d’équipe. Ce geste simple évite les doubles couches illisibles et les doublons dans l’index vectoriel. Notez le logiciel d’extraction et sa version dans le README du lot : sans cela, deux agents d’Arras compareront des résultats incomparables trois mois plus tard.

3

Lancer l’OCR avec la langue française

Installez le paquet de langue français pour Tesseract, ou activez l’équivalent dans votre outil. Lancez d’abord sur trois pages. Relisez à voix haute les noms propres locaux (rues, communes, sigles d’intercommunalité). Si les accents sautent ou si les « l » deviennent des « 1 », ajustez le prétraitement (contraste, deskew) avant de tout lancer. Les versions d’outils bougent : notez celle que vous utilisez. Si un toponyme local revient systématiquement déformé, ajoutez-le à un lexique de post-correction plutôt que d’accepter une base knowledge illisible pour les élus.

4

Nettoyer sans réécrire le fond

Corrigez les artefacts évidents (traits de scan, en-têtes répétés, coupures de mots en fin de ligne) avec des règles reproductibles. N’inventez pas une phrase manquante « pour faire joli ». Si un tampon masque une date, marquez [illisible] plutôt que de deviner. Le RAG amplifie ce que vous mettez dans l’index : une date inventée aujourd’hui devient une hallucination officielle demain. Toute date incertaine doit rester marquée comme telle : mieux vaut un trou signalé qu’une fausse décision de conseil municipal qui circulera dans le chat interne.

5

Exporter un livrable stable

Générez un PDF avec couche texte sélectionnable, ou un fichier texte/markdown par document, selon ce que votre pipeline d’ingestion attend. Conservez le scan d’origine à côté pour audit. Nommez les fichiers de façon stable (année-organe-sujet). Ce livrable alimentera Open WebUI, LlamaIndex ou Qdrant sans surprise. Voir aussi RAG Python + Qdrant pour l’indexation code. Conservez le couple scan brut + PDF OCRisé sous le même identifiant stable ; l’audit d’une association de Valenciennes commence souvent par retrouver l’original. Documentez le résultat et passez à l’étape suivante sans empiler d’autres changements le même jour.

6

Tester une question réelle avant le big bang

Posez trois questions dont vous connaissez la réponse dans le document. Vérifiez que le passage revient et que la rédaction reste fidèle. Si le chunking coupe une décision en deux, ajustez la taille des segments après, pas avant d’avoir un texte propre. Une mairie d’Arras ou une asso de Valenciennes gagne plus à dix documents fiables qu’à mille scans muets indexés trop tôt. Archivez les trois questions et les réponses attendues dans le même dépôt que le corpus : elles serviront de non-régression après chaque ré-OCR.

Commandes de principe (à adapter)

Les commandes ci-dessous illustrent un geste courant avec ocrmypdf / Tesseract. La syntaxe exacte dépend de votre version et de votre système. Lisez la page man ou la documentation officielle avant de lancer un lot nocturne. IAHDF n’est affilié à aucun éditeur.

Exemple de commandes OCR (principe)
# Vérifier si un PDF a déjà du texte (principe)
pdftotext -layout deliberation-scan.pdf - | head

# OCR français vers PDF avec couche texte (principe — lisez la doc de votre version)
ocrmypdf -l fra --deskew --clean deliberation-scan.pdf deliberation-ocr.pdf

# Alternative Tesseract sur image page (principe)
tesseract page-003.png page-003 -l fra pdf

# Ensuite seulement : ingestion dans votre RAG (Open WebUI, script, Qdrant…)

Contrôler la qualité du texte français

L’OCR administratif français casse souvent sur les accents, les cédilles, les sigles (EPCI, PLU, CCAS) et les noms de lieux. Constituez une mini-liste de contrôle : trois toponymes de votre territoire, deux sigles métier, une phrase juridique typique (« vu l’avis », « après en avoir délibéré »). Si ces ancres passent, vous pouvez élargir. Si elles cassent, corrigez le prétraitement ou changez d’outil avant d’indexer.

Méfiez-vous des tableaux scannés : une colonne décalée transforme un montant ou une date. Pour un budget communal ou un devis d’association, gardez le tableau sous les yeux humains. L’IA peut reformuler ; elle ne doit pas devenir la source des chiffres. Quand le manuscrit domine (notes manuscrites en marge), l’OCR imprimé échoue : isolez ces pages ou passez par une relecture humaine ciblée.

Signaux de qualité avant indexation
SignalLectureGeste
Texte sélectionnable dans le PDFCouche OCR présentePasser à l’échantillonnage sémantique
Accents et noms locaux correctsLangue et dictionnaire OKGarder la config ; documenter la version
Tableaux alignés absurdesStructure mal lueExtraire à part ou saisir à la main les cellules critiques
Pages quasi vides après OCRScan trop sombre / biaisRé-scanner ou prétraiter avant de relancer
Doublons de paragraphesDouble couche ou mauvais mergeNettoyer avant embedding

Brancher le texte sur Open WebUI ou un index

Une fois le texte fiable, le reste ressemble à un RAG classique : découpage, embeddings, retrieval, génération. Dans Open WebUI, chargez les PDF OCRisés dans la base de connaissances selon les menus du jour (les libellés changent : cherchez l’équivalent « documents / knowledge » dans la doc). Pour un réglage fin des chunks, les réglages RAG Open WebUI détaillent les leviers. Pour un embedding adapté au français, voyez embeddings pour RAG français.

Si vous codez, LlamaIndex ou LangChain peuvent ingérer le dossier de textes nettoyés puis pousser vers Qdrant : le tutoriel RAG Python + Qdrant reprend ce fil. Dans tous les cas, séparez clairement « corpus brut scanné », « corpus OCRisé validé » et « corpus indexé ». Cette séparation permet un rollback si une mauvaise session OCR pollue l’index.

Scène Hauts-de-France : archives à Arras

Imaginez le service archives d’une commune près d’Arras. Vingt ans de délibérations scannées occupent un partage réseau. Un élu demande un chatbot interne pour retrouver « la délibération sur la salle des fêtes ». Sans OCR, le prototype répond n’importe quoi. L’équipe commence par vingt PDF représentatifs, OCRise, fait vérifier trois décisions par la secrétaire de séance, puis indexe. Le gain n’est pas magique : c’est la confiance dans le texte sous-jacent. Les données personnelles hors sujet (coordonnées de particuliers dans des annexes) restent hors corpus.

Même logique pour une association de quartier à Lens qui a numérisé ses AG en photo, ou un cabinet d’architecte à Lille qui archive des notices scannées. Le protocole est le même : échantillon, OCR, contrôle humain, indexation, questions de régression. IAHDF peut accompagner la méthode en atelier ; les dates figurent sur l’agenda, sans promesse d’outil unique.

Checklist avant de généraliser

  • Échantillon validé par quelqu’un qui connaît les documents.
  • Version d’outil OCR notée ; commande exacte archivée.
  • Séparation brut / OCRisé / indexé.
  • Trois questions de régression documentées avec la page source.
  • Pas de données personnelles inutiles dans le corpus.
  • Plan de ré-OCR si un lot est mauvais (sans écraser les originaux).

Quand la checklist est verte, élargissez par lots. Surveillez les nouveaux scans entrants : un multifonction mal réglé peut réintroduire des images pures. Automatisez la détection d’extractibilité dans le dossier d’arrivée. Ainsi, le RAG reste alimenté par du texte, pas par des illusions de PDF. Pour un assistant grand public sur site, croisez aussi chatbot RAG sur site.

Dépannage OCR et index

Si l’OCR « réussit » mais le RAG reste sourd, vérifiez que vous indexez bien le fichier OCRisé et non le scan d’origine. Un lien symbolique mal pointé, un dossier monté en lecture seule, ou un cache d’ingestion qui ignore les nouveaux PDF suffisent à expliquer le mystère. Effacez explicitement la collection ou la base knowledge de test, puis ré-ingérez uniquement le lot validé. Conservez une capture de l’inventaire de fichiers hashés pour prouver quelle version est entrée.

Quand Tesseract produit un français « cassé » sur un lot entier, regardez d’abord la résolution et l’orientation des pages. Un lot scanné à l’envers ou en double page (livre ouvert) trompe l’OCR. Séparez les pages, redressez, puis relancez sur trois échantillons. Docling ou une piste vision peuvent sauver une page, mais généralisées trop tôt elles coûtent du temps machine sans garantie. La règle IAHDF : échantillon, décision, lots.

Pour les archives municipales, impliquez quelqu’un qui lit les délibérations au quotidien. Cette personne repère en trente secondes un sigle local mal lu qu’aucun script ne verra. Notez ses corrections dans un mini lexique (formes fausses → formes justes) réutilisable au nettoyage. Ce lexique devient un actif de la collectivité, au même titre que le plan de classement.

Questions fréquentes

Pourquoi mon RAG ignore-t-il un PDF que je vois très bien à l’écran ?

Parce que vous voyez une image, tandis que le pipeline lit une couche texte. Sans OCR, l’extracteur renvoie peu ou rien. Faites le test de sélection de texte dans le lecteur PDF. Si rien ne se sélectionne, lancez un OCR et contrôlez le résultat avant toute indexation. Ensuite seulement, reparlez de chunks ou d’embeddings. Le glossaire RAG rappelle pourquoi la recherche précède la rédaction. Tant que la sélection de texte échoue, aucune discussion sur les embeddings n’est pertinente : vous optimisez encore du vide documentaire.

Tesseract suffit-il pour des délibérations scannées ?

Souvent pour des scans propres en français, oui comme premier geste, à condition d’installer la langue fra et de vérifier accents et noms locaux. Sur des pages très dégradées, des tableaux denses ou du manuscrit, testez une autre piste (Docling, vision) sur le même échantillon. Comparez la fidélité, pas un score inventé. Documentez ce qui marche sur votre lot HdF et gardez les originaux. Documentez le choix d’outil dans une note d’une demi-page : critères, pages testées, défauts acceptés, afin d’éviter le débat perpétuel en comité de pilotage.

Puis-je OCRiser directement dans Open WebUI ?

Selon les versions et extensions, des aides existent, mais le réflexe robuste reste : produire un PDF texte fiable hors chat, puis l’ingérer. Vous gardez un artefact auditable. Vérifiez les menus du jour dans la documentation Open WebUI. Ne supposez pas qu’un bouton « upload » déclenche un OCR parfait sur tous vos scans municipaux. En cas de doute, externalisez l’OCR puis rechargez. L’upload dans le chat ne remplace pas un artefact versionné ; gardez le PDF texte hors de l’interface pour pouvoir le rejouer hors ligne.

Faut-il un GPU pour l’OCR ?

Pas forcément. Tesseract et ocrmypdf tournent fréquemment sur CPU pour des volumes modestes. Les approches modèle de vision peuvent demander davantage de ressources : parlez en ordre de grandeur, testez dix pages, lisez la fiche outil. IAHDF ne publie pas de mesure VRAM de labo. Choisissez selon volume, délai et qualité constatée sur votre échantillon local. Un ordre de grandeur machine se valide sur votre échantillon, pas sur une rumeur de forum : chronométrez uniquement pour décider, sans publier de benchmark.

Comment savoir si la qualité OCR est « assez bonne » pour le RAG ?

Par des questions dont vous connaissez la réponse exacte dans le document, et par une relecture de passages sensibles (dates, noms, dispositifs). Si le bon paragraphe revient et que la rédaction ne déforme pas la décision, vous pouvez élargir. Complétez avec l’évaluation RAG. Une belle prose qui cite une mauvaise page reste un échec métier, même si le chat « sonne » bien. Si la citation pointe la mauvaise page, traitez d’abord le retrieval et l’OCR avant d’accuser le modèle de chat d’être « trop créatif ».

Pour continuer

AgendaVoir les ateliers et permanences IAHDFInscriptionRejoindre la communauté IAHDFTutoriel suivantÉvaluer la qualité de son RAG
Cette ressource vous a-t-elle aidé ?

Pour aller plus loin

Tutoriel RAG dans Open WebUI : régler chunks, embeddings, recherche hybride et reranker 30 min · Équipe IAHDF Tutoriel Évaluer la qualité de son RAG : jeu de questions, métriques et outils 20 min · Équipe IAHDF Glossaire RAG (génération augmentée par recherche) : définition simple et exemples 14 min · Équipe IAHDF