Intégration Word dans Flask: upload et traitement web

Modifications:
- flask_app.py:
  * Ajout de "docx" dans ALLOWED_EXTENSIONS
  * Nouvelle fonction run_word_processing_job() avec:
    - Gestion tempfile pour python-docx (besoin d'un path)
    - Intégration du callback de progression SSE
    - Nettoyage automatique du fichier temporaire
  * Modification upload() route:
    - Détection du type de fichier (PDF/Word)
    - Routage vers le bon processeur (run_processing_job vs run_word_processing_job)
    - Messages d'erreur adaptés pour PDF et Word
  * Mise à jour des docstrings

- templates/upload.html:
  * Titre: "Parser PDF/Word/Markdown" (au lieu de PDF/Markdown)
  * Accept attribute: ".pdf,.docx,.md"
  * Tooltips: Explique que Word n'a pas besoin d'OCR
  * Pipeline de traitement: Section séparée pour PDF vs Word
  * Labels mis à jour pour inclure Word

Fonctionnalités:
 Upload de fichiers .docx via interface web
 Traitement en arrière-plan avec SSE
 Pas d'OCR nécessaire pour Word (économie ~0.003€/page)
 Réutilisation complète des modules LLM existants
 Extraction directe via python-docx
 Construction TOC depuis styles Heading 1-9

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-30 22:03:50 +01:00
parent 4de645145a
commit 9e4108def1
2 changed files with 132 additions and 27 deletions

View File

@@ -4,8 +4,8 @@
{% block content %}
<section class="section">
<h1>📄 Parser PDF/Markdown</h1>
<p class="lead">Uploadez un fichier PDF ou Markdown pour l'analyser et structurer son contenu</p>
<h1>📄 Parser PDF/Word/Markdown</h1>
<p class="lead">Uploadez un fichier PDF, Word (.docx) ou Markdown pour l'analyser et structurer son contenu</p>
{% if error %}
<div class="alert alert-warning">
@@ -16,18 +16,19 @@
<div class="search-box">
<form method="post" enctype="multipart/form-data">
<div class="form-group">
<label class="form-label" for="file">Fichier PDF ou Markdown</label>
<input
type="file"
name="file"
id="file"
<label class="form-label" for="file">Fichier PDF, Word ou Markdown</label>
<input
type="file"
name="file"
id="file"
class="form-control"
accept=".pdf,.md"
accept=".pdf,.docx,.md"
required
>
<div class="caption mt-1">Taille maximale : 50 MB</div>
<div class="caption" style="color: var(--color-accent); margin-top: 0.25rem;">
💡 Pour retester un document existant sans refaire l'OCR payant, cochez "Skip OCR"
💡 PDF: Pour retester sans refaire l'OCR payant, cochez "Skip OCR"
<br>💡 Word: Pas d'OCR nécessaire (extraction directe du contenu)
</div>
</div>
@@ -150,10 +151,17 @@
<div class="card">
<h3>📋 Pipeline de traitement</h3>
<div class="mt-2">
<p><strong>1. OCR Mistral</strong> — Extraction du texte et des images via l'API Mistral</p>
<p><strong>2. Markdown</strong> — Construction du document Markdown avec images</p>
<p><strong>3. Hiérarchie</strong> — Analyse des titres pour créer une structure arborescente</p>
<p><strong>4. LLM (optionnel)</strong> — Amélioration de la structure via Ollama</p>
<p><strong>PDF:</strong></p>
<p style="margin-left: 1rem;">1. OCR Mistral — Extraction du texte et des images via l'API Mistral</p>
<p style="margin-left: 1rem;">2. Markdown — Construction du document Markdown avec images</p>
<p style="margin-left: 1rem;">3. Hiérarchie — Analyse des titres pour créer une structure arborescente</p>
<p style="margin-left: 1rem;">4. LLM (optionnel) — Amélioration de la structure via Ollama/Mistral</p>
<p class="mt-3"><strong>Word (.docx):</strong></p>
<p style="margin-left: 1rem;">1. Extraction Word — Lecture directe du contenu (pas d'OCR)</p>
<p style="margin-left: 1rem;">2. Markdown — Construction du document Markdown à partir des paragraphes</p>
<p style="margin-left: 1rem;">3. TOC — Extraction de la hiérarchie depuis les styles Heading 1-9</p>
<p style="margin-left: 1rem;">4. LLM — Structuration sémantique et enrichissement</p>
</div>
</div>