DonnIA
Toutes les ressources
GuideData & RAG12 min

Convertir ses PDF avant de les donner à lire

Un PDF envoyé brut coûte cher et se lit mal. Le convertir en Markdown change la qualité des réponses.


Un PDF est un format d'impression : il décrit des positions de caractères sur une page, pas une structure de document. Donné tel quel à un modèle, il coûte cher et se lit mal. Les tableaux se mélangent, les colonnes s'entrelacent, les notes de bas de page s'insèrent au milieu des phrases.

Le convertir en Markdown avant de le donner change la qualité des réponses plus que n'importe quel prompt.

Pourquoi la conversion aide

Problème du PDF brutCe que le Markdown règle
Deux colonnes lues en zigzagUn seul flux de texte, dans l'ordre
Tableaux transformés en soupe de motsUne vraie structure de tableau
Titres indiscernables du corpsHiérarchie explicite, citable
Volume de tokens élevéMoins de bruit, plus de signal

Avant de commencer

  • Un PDF texte, pas un scan (voir plus bas pour les scans)
  • Python ou Node selon l'outil choisi
  • Dix minutes

1Reconnaître ce qu'on a

Ouvre le PDF et essaie de sélectionner une phrase.

  • La sélection fonctionne : c'est un PDF texte, la conversion sera propre.
  • Rien ne se sélectionne : c'est une image, il faut de la reconnaissance de caractères avant tout le reste.

Ne saute pas cette vérification. Convertir un scan avec un outil pour PDF texte produit un fichier vide, et on cherche l'erreur ailleurs.

2Convertir un PDF texte

Le plus direct, en Python :

pip install pymupdf4llm
python -c "import pymupdf4llm; open('doc.md','w',encoding='utf-8').write(pymupdf4llm.to_markdown('doc.pdf'))"

La sortie garde les titres, les listes et les tableaux. Pour un document long, la conversion page par page permet de garder la numérotation, utile pour citer une source :

import pymupdf4llm

pages = pymupdf4llm.to_markdown("doc.pdf", page_chunks=True)
with open("doc.md", "w", encoding="utf-8") as f:
    for i, page in enumerate(pages, start=1):
        f.write(f"\n\n<!-- page {i} -->\n\n")
        f.write(page["text"])

Garder la trace des pages

Ces marqueurs de page ne coûtent presque rien et permettent au modèle de citer « page 14 » au lieu de « quelque part dans le document ».

3Relire la conversion

Aucun convertisseur n'est parfait. Trois points à vérifier avant d'utiliser le résultat :

  1. Les tableaux. C'est ce qui casse le plus souvent. Un tableau raté produit des réponses fausses avec assurance.
  2. L'ordre de lecture. Sur une mise en page à deux colonnes, vérifie qu'un paragraphe n'est pas coupé par le début du suivant.
  3. Les en-têtes et pieds de page répétés. Ils polluent le texte à chaque page ; un sed suffit à les retirer.

4Découper avant de donner à lire

Un Markdown de 300 pages reste trop gros pour être utile d'un bloc. Découpe par section, en gardant les titres comme frontières :

Decoupe doc.md en fichiers par titre de niveau 2, un fichier par section,
nommes d'apres le titre. Garde les marqueurs de page.

Ensuite, on ne donne à lire que la ou les sections utiles. C'est la différence entre payer 300 pages et en payer trois.

Le cas des scans

Si rien ne se sélectionne, il faut d'abord reconnaître le texte :

ocrmypdf --language fra scan.pdf scan-texte.pdf

Le PDF de sortie contient une couche de texte, et redevient convertible avec la méthode ci-dessus.

La reconnaissance se trompe

Sur un scan de mauvaise qualité, les chiffres souffrent en premier. Ne fonde pas un calcul sur des montants issus d'un OCR sans les vérifier à l'œil.

Quelques prompts pour aller plus loin

ObjectifPrompt à adapter
NettoyerRetire de ce Markdown les en-tetes et pieds de page qui se repetent a chaque page.
Vérifier un tableauCompare le tableau de la page 12 du PDF et sa version Markdown. Signale toute valeur qui differe.
Résumer avec sourcesResume la section [TITRE] en dix lignes, en citant les numeros de page.
Extraire du structuréExtrais de ce document un tableau [COLONNES]. Si une valeur est absente, ecris "non renseigne" plutot que de deviner.

Tu as d’autres ressources comme ça ?

Ce que tu viens de lire est entièrement gratuit. Une nouvelle ressource part chaque semaine dans la newsletter : guides, modèles à copier et liens triés, sans compte à créer.

Cette page est en accès libre, n’hésite pas à la partager.