Deux scripts Python pour convertir des PDFs en Markdown structuré et optimisé pour les systÚmes RAG (Retrieval-Augmented Generation), en utilisant les capacités vision de GPT-4o.
pdf-to-md-rag-simple.py |
pdf-to-md-rag-advanced.py |
|
|---|---|---|
| Approche | Envoie le PDF entier en une seule requĂȘte | Traite chaque page individuellement (vision) |
| Idéal pour | PDFs textuels, documents courts/moyens | PDFs scannés, mise en page complexe |
| Vitesse | ⥠Rapide (1 requĂȘte) | đą Plus lent (1 requĂȘte / page) |
| Fidélité | TrÚs haute (verbatim) | Haute (correction artefacts scan) |
| RĂ©sumĂ© auto | â | â (frontmatter + rĂ©sumĂ© exĂ©cutif) |
git clone https://github.com/samuelcalegari/pdf-to-md-rag
cd pdf-to-md-rag
pip install -r requirements.txt
Créez un fichier .env à la racine :
OPENAI_API_KEY=sk-...
pdf-to-md-rag-simple.py)
Envoie le PDF complet Ă GPT-4o en une seule requĂȘte. IdĂ©al pour les documents textuels natifs.
# Utilisation de base
python pdf-to-md-rag-simple.py rapport.pdf
# Avec fichier de sortie personnalisé
python pdf-to-md-rag-simple.py rapport.pdf -o sortie.md
# Avec URL source (ajoutée au frontmatter YAML)
python pdf-to-md-rag-simple.py rapport.pdf --source-url https://example.com/rapport.pdf
# Avec clé API en argument
python pdf-to-md-rag-simple.py rapport.pdf --api-key sk-...
# Augmenter la limite de tokens (si la réponse est tronquée)
python pdf-to-md-rag-simple.py rapport.pdf --output-tokens 12000
# Mode silencieux
python pdf-to-md-rag-simple.py rapport.pdf --quiet
Arguments disponibles :
| Argument | Description | Défaut |
|---|---|---|
pdf |
Chemin vers le fichier PDF source | (obligatoire) |
-o, --output |
Chemin du fichier Markdown de sortie | <nom>.rag.md |
--api-key |
Clé API OpenAI | OPENAI_API_KEY (.env) |
--source-url |
URL publique du PDF (ajoutée au frontmatter) | nom du fichier |
--model |
ModĂšle OpenAI Ă utiliser | gpt-4o |
--output-tokens |
Tokens de sortie maximum | 8192 |
-q, --quiet |
Supprime les messages de progression | false |
pdf-to-md-rag-advanced.py)
Convertit chaque page en image et l'envoie séparément à GPT-4o Vision. Nécessaire pour les PDFs scannés ou à mise en page complexe.
# Utilisation de base
python pdf-to-md-rag-advanced.py rapport.pdf
# Avec fichier de sortie personnalisé
python pdf-to-md-rag-advanced.py rapport.pdf -o sortie.md
# Avec URL source
python pdf-to-md-rag-advanced.py rapport.pdf --source-url https://example.com/rapport.pdf
# Résolution d'image plus élevée (meilleure qualité, plus coûteux)
python pdf-to-md-rag-advanced.py rapport.pdf --dpi 200
# Ajuster les tokens par page
python pdf-to-md-rag-advanced.py rapport.pdf --output-tokens 3000
# Mode silencieux
python pdf-to-md-rag-advanced.py rapport.pdf --quiet
Arguments disponibles :
| Argument | Description | Défaut |
|---|---|---|
pdf |
Chemin vers le fichier PDF source | (obligatoire) |
-o, --output |
Chemin du fichier Markdown de sortie | <nom>.rag.md |
--api-key |
Clé API OpenAI | OPENAI_API_KEY (.env) |
--source-url |
URL publique du PDF (ajoutĂ©e au frontmatter) | â |
--dpi |
Résolution de rendu des pages en DPI | 150 |
--output-tokens |
Tokens de sortie maximum par page | 2000 |
-q, --quiet |
Supprime les messages de progression | false |
Les deux scripts génÚrent un fichier .rag.md avec :
**Corps structuré** en Markdown avec titres hiérarchiques, listes, tableaux et annotations spéciales :
```markdown
<!-- tampon : "ARRIVĂE 16 SEP. 2016" -->
<!-- annotation : "note manuscrite" -->
Version avancée uniquement : séparateurs de pages --- compatibles avec les frameworks RAG, et un résumé exécutif + points clés en début de document.
Votre PDF est scanné (image) ?
âââ OUI â pdf-to-md-rag-advanced.py
âââ NON â Le PDF a-t-il une mise en page complexe (colonnes, tableaux imbriquĂ©s) ?
âââ OUI â pdf-to-md-rag-advanced.py
âââ NON â pdf-to-md-rag-simple.py â
(plus rapide, moins coûteux)
--output-tokens ou découpez le PDF en plusieurs parties.< 100) peut dégrader la reconnaissance sur les PDFs scannés ; un DPI trop élevé (> 250) augmente le coût sans gain significatif.openai
python-dotenv
pymupdf # version avancée uniquement
tqdm # version avancée uniquement
Ce projet est sous license MIT - voir LICENSE pour plus de détails.