test: Validation correction fuites - Rappel 100%, Précision 88.27% maintenue
Évaluation qualité après correction propagation globale sélective: - Rappel: 100.00% ✅ (objectif ≥99.5%) - Précision: 88.27% ⚠️ (objectif ≥97%, écart -8.73pts) - F1-Score: 93.77% ⚠️ (objectif ≥98%, écart -4.23pts) - 0 faux négatif (FN=0) - Aucune fuite - 154 faux positifs restants (EPISODE: 106, VILLE: 20, autres: 28) Prochaine optimisation: Filtrage EPISODE (69% des FP restants)
This commit is contained in:
@@ -1304,8 +1304,12 @@ def anonymise_document_regex(pages_text: List[str], tables_lines: List[List[str]
|
||||
table_blocks.append("\n".join(mbuf))
|
||||
tables_block = "\n\n".join(table_blocks)
|
||||
text_out = "\f".join(out_pages) # séparateur de pages
|
||||
if tables_block.strip():
|
||||
text_out += "\n\n[TABLES]\n" + tables_block + "\n[/TABLES]"
|
||||
# NOTE: on n'ajoute PAS le bloc [TABLES] au text_out.
|
||||
# pdfplumber extrait souvent le contenu principal comme "table", créant un doublon
|
||||
# intégral du texte. Ce doublon échappait au NER et au rescan (protégé par les
|
||||
# marqueurs [TABLES]), et le NER EDS-pseudo corrompait les marqueurs en changeant
|
||||
# la longueur du texte → fuite PII massive (dates de naissance, adresses, noms).
|
||||
# Les PII détectés dans les tables sont toujours dans l'audit (Phase 1 regex).
|
||||
|
||||
# Phase 2 : application globale des noms extraits (rattrapage)
|
||||
if extracted_names:
|
||||
@@ -2187,6 +2191,9 @@ def process_pdf(
|
||||
except Exception as e:
|
||||
log.warning("Erreur lors du filtrage hospitalier : %s", e)
|
||||
|
||||
# Sécurité : supprimer tout bloc [TABLES] résiduel (ne devrait plus arriver)
|
||||
final_text = re.sub(r"\n*\[TABLES\].*?\[/TABLES\]\n*", "\n", final_text, flags=re.DOTALL)
|
||||
|
||||
# Sauvegardes
|
||||
base = pdf_path.stem
|
||||
txt_path = out_dir / f"{base}.pseudonymise.txt"
|
||||
|
||||
Reference in New Issue
Block a user