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>
This commit is contained in:
@@ -1,56 +1,52 @@
|
||||
{"page": 0, "kind": "force_term", "original": "CENTRE HOSPITALIER COTE BASQUE", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "ETAB", "original": "Pôle Spécialités Médicales", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "ETAB", "original": "Service de Gastro-Entérologie - Oncologie Digestive", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "NOM", "original": "Christelle Béraut", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "NOM", "original": "Thomas Grellety", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "faudemar@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "NOM", "original": "BOUBE", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "mboube@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "NOM", "original": "BRUGEL", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "mbrugel@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "mcboudier@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "NOM", "original": "GOUTORBE", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "NOM", "original": "Absce", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "fgoutorbe@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "aguilngar@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "tkhuong-huu@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "dnivet@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "oui@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "boui@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "force_term", "original": "CENTRE HOSPITALIER COTE BASQUE", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "ETAB", "original": "Pôle Spécialités Médicales", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "ETAB", "original": "Service de Gastro-Entérologie - Oncologie Digestive", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "RPPS", "original": "10100532760", "placeholder": "[RPPS]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EMAIL", "original": "fprevost@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "IPP", "original": "21020800", "placeholder": "[IPP]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EPISODE", "original": "N° Episode 23127286", "placeholder": "[EPISODE]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "force_term", "original": "CENTRE HOSPITALIER COTE BASQUE", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "ETAB", "original": "Pôle Spécialités Médicales", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "ETAB", "original": "Service de Gastro-Entérologie - Oncologie Digestive", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 0, "kind": "EPISODE", "original": "23127286", "placeholder": "[EPISODE]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "Christelle Béraut", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "PELLERIN-GUIGNARD Aude", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "audemar@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "BOUBE Anthibiothérapie", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "Thomas Grellety", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "faudemar@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "BOUBE", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "mboube@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "BRUGEL ATB", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "brugel@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "BRUGEL", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "mbrugel@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "mcboudier@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "fgoutorbe@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "PUJOS", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "aguilngar@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "tkhuong-huu@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "dnivet@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "boui@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "force_term", "original": "CENTRE HOSPITALIER COTE BASQUE", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "ETAB", "original": "Pôle Spécialités Médicales", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "ETAB", "original": "Service de Gastro-Entérologie - Oncologie Digestive", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "PELLERIN-GUIGNARD Aude", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "PUJOS", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "PUJOS Marion", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "RPPS", "original": "10100532760", "placeholder": "[RPPS]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EMAIL", "original": "fprevost@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "NOM", "original": "PUJOS Marion", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "IPP", "original": "21020800", "placeholder": "[IPP]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EPISODE", "original": "N° Episode 23127286", "placeholder": "[EPISODE]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "force_term", "original": "CENTRE HOSPITALIER COTE BASQUE", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "ETAB", "original": "Pôle Spécialités Médicales", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "ETAB", "original": "Service de Gastro-Entérologie - Oncologie Digestive", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 1, "kind": "EPISODE", "original": "23127286", "placeholder": "[EPISODE]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "NOM", "original": "Christelle Béraut", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "NOM", "original": "Thomas Grellety", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "NOM", "original": "AUDEMAR Franck", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "EMAIL", "original": "faudemar@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "NOM", "original": "BOUBE", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "EMAIL", "original": "mboube@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "NOM", "original": "BRUGEL Rédigé", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "NOM", "original": "BRUGEL", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "EMAIL", "original": "mbrugel@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "EMAIL", "original": "mcboudier@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "EMAIL", "original": "fgoutorbe@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
@@ -58,7 +54,12 @@
|
||||
{"page": 2, "kind": "EMAIL", "original": "tkhuong-huu@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "EMAIL", "original": "dnivet@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "EMAIL", "original": "boui@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "force_term", "original": "CENTRE HOSPITALIER COTE BASQUE", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "ETAB", "original": "Pôle Spécialités Médicales", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "ETAB", "original": "Service de Gastro-Entérologie - Oncologie Digestive", "placeholder": "[MASK]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "NOM", "original": "AUDEMAR Franck", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "NOM", "original": "MEURAT Aurore", "placeholder": "[NOM]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "RPPS", "original": "10100532760", "placeholder": "[RPPS]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "EMAIL", "original": "fprevost@ch-cotebasque.fr", "placeholder": "[EMAIL]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "IPP", "original": "21020800", "placeholder": "[IPP]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "EPISODE", "original": "N° Episode 23127286", "placeholder": "[EPISODE]", "bbox_hint": null}
|
||||
{"page": 2, "kind": "EPISODE", "original": "23127286", "placeholder": "[EPISODE]", "bbox_hint": null}
|
||||
|
||||
Reference in New Issue
Block a user