PDF vers Markdown pour le RAG
Convertissez vos PDF en Markdown propre et adapté au chunking pour la recherche et l'ingestion par LLM : tableaux et formules intacts, scans en OCR, bien moins de tokens que le texte brut du PDF. Pilotez-le depuis l'API REST ou le MCP hébergé.
Le Markdown est l'entrée propre que le RAG attend
Incruster le texte brut d'un PDF donne au système de recherche des fragments bruités : les titres, listes et tableaux s'effondrent, l'ordre de lecture se rompt et des résidus binaires et de mise en page s'infiltrent. Convertissez d'abord le PDF en Markdown et la structure du document survit : vous pouvez ainsi découper par titres et sections, conserver les tableaux et formules comme des faits et dépenser bien moins de tokens par passage. Des fragments plus propres en entrée, une meilleure récupération en sortie.
Ce que le Markdown propre apporte à votre pipeline
Limites de fragment propres
Les titres et sections survivent, ainsi découper par structure produit des fragments cohérents et autonomes au lieu de coupures en milieu de phrase.
Moins de tokens
Le Markdown brut est bien moins coûteux à incruster et à envoyer comme contexte que les vidages de PDF bruts ou le HTML, ainsi vous indexez et récupérez plus pour moins.
Les tableaux restent des faits
Les colonnes deviennent de vrais tableaux Markdown, pas des lignes désordonnées, ainsi les nombres tabulaires restent récupérables au lieu d'être brouillés.
Formules conservées
La notation mathématique est conservée au lieu d'être aplatie en caractères illisibles qui polluent les embeddings.
Les scans deviennent du texte
L'OCR transforme les PDF en image seule et numérisés en Markdown sélectionnable dans de nombreuses langues, ainsi les scans sont eux aussi indexables.
Liens et notes de bas de page
Les hyperliens et les notes de bas de page sont conservés comme liens Markdown au lieu d'être supprimés, gardant les références intactes.
Ingérez un PDF en quatre étapes
Un cycle de vie prévisible en HTTPS avec une clé API bearer. Le MCP hébergé expose les mêmes étapes comme outils d'agent.
Créez une tâche
Faites un POST de l'URL du PDF (ou des octets téléversés) vers /api/v2/jobs. Vous obtenez un id de tâche et un statut.
Interrogez jusqu'à ready
Faites un GET /api/v2/jobs/{id} jusqu'à ce que status soit ready ou error. En cas d'error, lisez error_code/error_message. Sur les offres payantes, enregistrez un webhook au lieu d'interroger.
Récupérez le Markdown
Faites un GET /api/v2/jobs/{id}/download. Respectez truncated et pages : truncated signifie qu'un long document a été renvoyé partiellement jusqu'au budget de temps.
Découpez et incrustez
Découpez par titres/sections, incrustez les fragments et indexez-les dans votre base de données vectorielle. La structure du Markdown garde les limites propres.
# 1. créer une tâche depuis une URL de PDF curl -s -X POST https://pdf2md.dev/api/v2/jobs \ -H "Authorization: Bearer p2m_your_key" \ -H "Content-Type: application/json" \ -d '{"url":"https://example.com/paper.pdf"}' # -> { "job_id": "...", "status": "queued" } # 2. interroger le statut jusqu'à ready ou error curl -s https://pdf2md.dev/api/v2/jobs/JOB_ID \ -H "Authorization: Bearer p2m_your_key" # -> { "status": "ready", "pages": 24, "truncated": false } # en cas d'échec : { "status": "error", "error_code": "...", "error_message": "..." } # 3. récupérer le Markdown, puis le découper + l'incruster curl -s https://pdf2md.dev/api/v2/jobs/JOB_ID/download \ -H "Authorization: Bearer p2m_your_key"
Vous préférez les outils d'agent ? Le MCP hébergé expose le même cycle de vie (pdf_to_markdown_create_job_from_url, _get_job, _get_markdown) pour que Claude, ChatGPT et les frameworks d'agents ingèrent des PDF sans serveur local.
Stratégies de chunking pour le Markdown
Le Markdown propre vous offre des coutures naturelles où découper, ainsi les fragments restent cohérents et récupérables.
Découpez par titres
Utilisez la hiérarchie des titres comme limites de fragment pour que chacun soit une section autonome avec son propre contexte.
Gardez les tableaux entiers
Ne découpez jamais à l'intérieur d'un tableau Markdown ; un demi-tableau perd son sens. Gardez chaque tableau, et son titre, dans un seul fragment.
Ajoutez un peu de chevauchement
Un petit chevauchement d'une ou deux phrases entre fragments adjacents conserve le contexte aux limites et améliore le rappel.
Portez le chemin du titre
Faites précéder le titre de section (ou le fil d'Ariane des titres) à chaque fragment pour que l'embedding capture d'où il vient.
Dimensionnez bien les fragments
Visez quelques centaines de tokens par fragment : trop grand dilue la pertinence, trop petit perd le contexte. La structure du Markdown rend cela facile à régler.
Supprimez le passe-partout
Retirez les en-têtes et pieds de page répétés pour qu'ils ne dominent pas les embeddings ; le convertisseur supprime déjà la plus grande partie du bruit de mise en page.
Une ingestion minimale en Python
Créer, interroger, récupérer, puis découper par titres, prêt à incruster et indexer dans votre base de données vectorielle.
# pip install requests import requests, time, re API = "https://pdf2md.dev/api/v2" H = {"Authorization": "Bearer p2m_your_key"} job = requests.post(f"{API}/jobs", headers=H, json={"url": "https://example.com/paper.pdf"}).json() jid = job["job_id"] while True: j = requests.get(f"{API}/jobs/{jid}", headers=H).json() if j["status"] in ("ready", "error"): break time.sleep(3) md = requests.get(f"{API}/jobs/{jid}/download", headers=H).text # découpage simple par titres de niveau supérieur -> fragments prêts à incruster chunks = re.split(r"\n(?=# )", md)
Pourquoi les tableaux se récupèrent mieux
Un tableau désordonné s'incruste comme du bruit, ainsi le nombre dont vous avez besoin correspond rarement à une requête. En tant que vrai tableau Markdown, les lignes et les en-têtes restent alignés, ainsi les données tabulaires comme les prix, les métriques et les dates restent recherchables et citables dans les réponses.
Interrogation ou webhooks
Pour quelques documents, interrogez GET /api/v2/jobs/{id} toutes les quelques secondes. Pour les pipelines de masse ou de backend sur une offre payante, enregistrez un webhook (ou passez callback_url) et nous vous faisons un POST sur ready ou error, ainsi vous évitez complètement l'interrogation.
Intégrez-le dans votre pipeline
Le même convertisseur est une API REST et un endpoint MCP hébergé, avec une découverte lisible par machine pour que scripts et agents le pilotent directement.
Questions fréquentes
Pourquoi le Markdown pour le RAG plutôt que le texte brut du PDF ?
L'extraction brute perd la structure (les titres, listes et tableaux s'effondrent et l'ordre de lecture se rompt), ce qui produit des fragments bruités. Le Markdown conserve la structure, ainsi le chunking par titres donne des passages plus propres et plus faciles à récupérer, et il utilise bien moins de tokens que les vidages bruts ou le HTML.
Les tableaux et formules survivent-ils ?
Oui. Les colonnes deviennent de vrais tableaux Markdown au lieu de lignes désordonnées, et la notation mathématique est conservée au lieu d'être aplatie, ainsi les données numériques et tabulaires restent récupérables. En savoir plus sur l'extraction de tableaux.
Puis-je l'automatiser dans un pipeline ?
Oui. Utilisez l'API REST (créer, interroger, télécharger) avec une clé API bearer, ou le MCP hébergé pour les frameworks d'agents. Sur les offres payantes, un webhook élimine l'interrogation. Il n'y a rien à héberger. Consultez le tutoriel Python pour un exemple complet.
Comment gérer les longs documents ?
Chaque conversion s'exécute jusqu'à un budget de temps par offre ; un long document est renvoyé partiellement avec truncated=true au lieu d'échouer. Lisez truncated et découpez les fichiers très volumineux, ou passez à une offre supérieure avec un budget plus large.
Gère-t-il les PDF numérisés pour l'ingestion ?
Oui. Les PDF en image seule et numérisés sont traités par OCR en Markdown sélectionnable dans de nombreuses langues, ainsi les scans deviennent du texte récupérable dans votre index.
Comment devrais-je découper le Markdown pour le RAG ?
Découpez selon la hiérarchie des titres pour que chaque fragment soit une section autonome, gardez les tableaux entiers, ajoutez un petit chevauchement entre les fragments et faites précéder le titre de la section pour que l'embedding connaisse le contexte. Visez quelques centaines de tokens par fragment.
Pourquoi les tableaux Markdown se récupèrent-ils mieux que le texte brut ?
L'extraction brute brouille les colonnes en bruit, ainsi la valeur dont vous avez besoin correspond rarement à une requête. Un vrai tableau Markdown garde les lignes et en-têtes alignés, ainsi les données tabulaires restent recherchables et citables.
Existe-t-il une offre gratuite pour tester ?
Oui. Un compte Google gratuit active une clé API et le MCP hébergé : 3 emplacements, fichiers de 10 Mo, un budget de temps de 15 minutes et une conservation d'1 heure. Les offres payantes augmentent chaque limite et ajoutent les webhooks et la création par lots.