📄 PDF → Markdown RAG Optimizer

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.


✹ Vue d'ensemble

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)

🚀 Installation

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-...

📩 Utilisation

Version Simple (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

Version Avancée (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

📝 Format de sortie

Les deux scripts génÚrent un fichier .rag.md avec :

Frontmatter YAML en en-tĂȘte : ```yaml

title: "Titre du document" date: "2024-01-15" tags: [mot-clé1, mot-clé2, ...] résumé: "Résumé factuel du document en 2-3 phrases." expéditeur: "Nom, Titre, Organisation" destinataire: "Nom, Titre, Organisation" source_url: "https://example.com/document.pdf"


**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.


💡 Quand utiliser quelle version ?

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)

⚠ Limitations


📋 DĂ©pendances

openai
python-dotenv
pymupdf        # version avancée uniquement
tqdm           # version avancée uniquement

📄 Licence

Ce projet est sous license MIT - voir LICENSE pour plus de détails.