Commit Graph

3 Commits

Author SHA1 Message Date
8629a0cda0 fix(phase2): Élimination FP cross-line + word boundaries — 0 fuite, 0 FP médical
- Remplace \s+ par [ \t]+ dans 11 regex d'extraction de noms (empêche capture cross-line de médicaments)
- Ajoute \b word boundaries dans RE_PERSON_CONTEXT (empêche "PDR" de matcher "DR")
- Ajoute filtrage _MEDICAL_STOP_WORDS_SET dans selective_rescan._rescan_person
- Ajoute stop words : labos pharma (MYL/VTS/ARW/PAN/MSO), dosages (FAIBLE/FORT), anatomie imagerie (CEREBRAL/ABDOMINO-PELVIEN)
- Filtre stop words dans _add_name_force et _add_tokens_force_first
- Mise à jour baseline regression_tests/ avec 29 fichiers du batch audit 30

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 11:24:22 +01:00
e967a67052 feat(phase2): Extraction layout-aware multi-colonnes — 322 fuites → 0, -103 FP
Phase 2 de l'amélioration qualité anonymisation :

1. Extraction multi-colonnes (PyMuPDF layout-aware) :
   - Nouvelle fonction _extract_page_layout_aware() détecte les layouts
     sidebar+corps (typiques des CRH/CRO hospitaliers)
   - Remplace pdfplumber comme extraction primaire (PyMuPDF blocks)
   - Élimine l'entrelacement de texte entre sidebar et corps médical
   - pdfplumber conservé pour les tables et comme fallback

2. Masquage FINESS multiline :
   - Détection "N° Finess\n[...]\n640000162" (label et numéro séparés)
   - Propagation globale du numéro FINESS sur toutes les pages
   - Gestion du format *640000162* (avec astérisques Trackare)

3. Masquage URLs hospitalières (www.ch-xxx.fr)

4. Nettoyage crochets doubles [[PLACEHOLDER]] → [PLACEHOLDER]

Résultats non-régression (30 fichiers audit) :
- Fuites : 322 → 0 (-100%)
- Faux positifs : 113 → 10 (-91%)
- 0 régression fonctionnelle
- OGC 1-59 : 0 fuite soignant, 0 FINESS, 0 lieu de naissance

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 18:19:08 +01:00
bc2fe667a0 fix: Corrections qualité Phase 1 — 261 fuites en moins, 0 régression
Audit sur 30 fichiers aléatoires (OGC 12-690) révélant un overfitting
sur les 59 premiers OGC. Corrections appliquées avec test de non-régression
à chaque étape :

- NDA pieds de page Trackare : regex Episode N. (227→0 fuites)
- ONDANSETRON : word boundary \b sur RE_NUMERO_DOSSIER (32→0)
- RPPS isolés : détection 11 chiffres dans docs Trackare (3→0)
- Stop words : retrait noms réels (ute, dogue, cambo, bains), ajout
  termes médicaux (AINS, ponction, hanche, burkitt, ORL, GDS, OAP...)
- Pattern DR. Prénom NOM : capture prénoms médecins (Ute ×19, Tam...)
- force_names : contextes structurés (DR., Signé, Note d'évolution)
  bypassent les stop words pour masquer les vrais noms de soignants
- Phase 2b : PiiHit trackare (EPISODE, RPPS) appliqués au texte .txt
- Framework de non-régression (regression_tests/) + batch audit 30 fichiers

Résultat : 322→61 fuites détectées, 113→109 faux positifs, 0 régression.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:32:28 +01:00