# 🧩 Architecture du Programme - Prétraitement PDF pour Ragflow

## 🎯 Objectif
Créer une application Python avec interface graphique pour :

- Visualiser un document PDF page par page
- Sélectionner une ou plusieurs zones visuelles (schémas, tableaux, formules)
- Ajouter un contexte textuel manuellement ou via OCR
- Traduire, interpréter, et reformuler le contenu sélectionné
- Générer un fichier enrichi (.md ou .json) prêt à être ingéré dans Ragflow

---

## 🧱 Structure générale

### 📁 Arborescence recommandée :
```
ragflow_pretraitement/
│
├── main.py                    # Point d'entrée GUI
├── ui/                        # Interfaces Tkinter ou PyQt
│   └── viewer.py
│
├── utils/                     # Fonctions OCR, traduction, vision
│   ├── ocr.py
│   ├── translate.py
│   ├── vision.py
│   ├── export.py
│   └── ragflow_api.py (optionnel)
│
├── data/                      # Données intermédiaires
│   └── outputs/
│
└── docs/                      # Templates de prompts
```

---

## 🖼️ Module 1 - Visualisation PDF

- Conversion de chaque page en image (`PyMuPDF` ou `pdf2image`)
- Affichage dans une interface `Tkinter` ou `PyQt6`
- Navigation inter-pages (boutons ou flèches)
- Zoom et défilement

---

## 🖍️ Module 2 - Sélection de zones + typage

- Sélection par rectangle (canvas)
- Affichage des coordonnées
- Ajout d'un label au type de zone :
  - `schéma`, `formule`, `tableau`, `autre`
- Possibilité de rattacher un **contexte textuel**
  - automatique (texte autour)
  - manuel (saisie utilisateur)

---

## 🧠 Module 3 - Traitement par IA

### 🧾 Table de correspondance LLM / usage

| Étape                                | Objectif                                                                 | Modèle recommandé                         |
|-------------------------------------|--------------------------------------------------------------------------|-------------------------------------------|
| Traduction FR ↔ EN                  | Traduire contexte/légende avant ou après vision                          | `mistral:latest`                          |
| Interprétation de schéma            | Comprendre une figure annotée + légende                                 | `llama3.2-vision:90b-instruct-q8_0`       |
| Vision rapide (test)                | Moins précis, plus léger                                                | `llava:34b-v1.6-fp16`                     |
| Embedding                           | Création de vecteurs pour Ragflow                                       | `nomic-embed-text:137m-v1.5-fp16`         |
| Reranking                           | Classement fin des chunks pertinents                                    | `bge-reranker-v2-m3`                      |
| Résumé technique                    | Résumer sections longues, reformuler                                    | `deepseek-r1:70b-llama-distill-q8_0`      |
| Structuration en Markdown/JSON     | Générer format final pour Ragflow                                       | `mistral`, `cline_qwen_fp16`              |

---

## 📤 Module 4 - Génération export .md / .json

Chaque bloc est structuré comme :

### Markdown :
```md
### Figure 3 - Classification des sols
_Context_: Le schéma illustre...
_Description (générée)_: The diagram shows...
_Image_: `fig3.png`
_Metadata_: page=12, type=schéma, source=NF-P11-300
```

### JSON :
```json
{
  "type": "schéma",
  "page": 12,
  "title": "Figure 3 - Classification des sols",
  "context": "Le schéma illustre...",
  "description": "The diagram shows...",
  "image_path": "fig3.png",
  "source": "NF-P11-300"
}
```

---

## 🧠 Ergonomie recommandée

- UI claire avec navigation pages
- Couleur différente pour chaque type de zone
- Ajout manuel possible de contexte
- Historique des zones traitées (affichage à droite ?)
- Export par page ou global

---

## 🔄 Extensions futures

- Intégration API Ragflow
- Traitement automatique complet des tableaux (via `pdfplumber`, `ocr_table`)
- Détection automatique de figures + légendes (via Layout Detection)
- Workflow en ligne de commande pour traitement batch

---

## ✅ Prochaines étapes
- [ ] Valider l’interface de navigation
- [ ] Intégrer OCR + zone de contexte
- [ ] Préparer modules LLM via Ollama
- [ ] Tester pipeline complet schéma ➝ chunk enrichi ➝ Ragflow
