diff --git a/anonymizer_core_refactored_onnx.py b/anonymizer_core_refactored_onnx.py index ae7cb2a..32baade 100644 --- a/anonymizer_core_refactored_onnx.py +++ b/anonymizer_core_refactored_onnx.py @@ -742,13 +742,17 @@ _MEDICAL_STOP_WORDS_SET = { "infectieuse", "infectieuses", # Termes soins infirmiers / activités de la vie quotidienne (FP trackare doc 216) "aide", "partielle", "partiel", "complete", "complète", "complet", - "contention", "lavabo", "blader", "scan", "post", + "contention", "lavabo", "blader", "scan", "post", "lunettes", "deshabillage", "déshabillage", "habillage", "surveillance", "surv", "refection", "réfection", "miction", "toilette", "douche", "changes", "installation", "transfert", "mobilisation", "alimentation", "hydratation", "collation", "stimulation", "prevention", "prévention", + # Termes pharmaceutiques/matériel médical FP (retour relecteur 2026-03-16) + "chlorure", + # Dispositifs médicaux (FP "OXYGENE LUNETTES" → [NOM]) + "canule", "canules", "masque", "sonde", "sondes", } # Enrichissement automatique avec les ~4000 noms de médicaments d'edsnlp _MEDICAL_STOP_WORDS_SET.update(_load_edsnlp_drug_names()) @@ -885,6 +889,12 @@ RE_EXTRACT_COURRIER = re.compile( r"Courrier\s+(?:Epi|Ep[ée]ph[ée]m[eé]ride|Hospit)\s*[\-–]\s*" rf"((?:{_UC_NAME_TOKEN})(?:\s*,\s*(?:{_UC_NAME_TOKEN}))*)", ) +# "CABINET ETXEBARNONDOA", "Cabinet Médical DUPONT", "CABINET MEDICAL DU DR MACHIN" +RE_EXTRACT_CABINET = re.compile( + r"\bCABINET\s+(?:M[ÉEe]DICAL\s+)?(?:DU\s+)?(?:DR\.?\s+)?" + rf"((?:{_UC_NAME_TOKEN})(?:[ \t]+(?:{_UC_NAME_TOKEN})){{0,2}})", + re.IGNORECASE, +) # Téléphone avec extension slash : 05.59.44.38.32/34 RE_TEL_SLASH = re.compile( r"(? str: val = m.group(1) or m.group(2) or m.group(0) @@ -2016,6 +2037,9 @@ def _extract_document_names(full_text: str, cfg: Dict[str, Any]) -> Tuple[set, s # Opérateur / Anesthésiste / Chirurgien + nom(s) for m in RE_EXTRACT_OPERATEUR.finditer(full_text): _add_tokens_force_first(m.group(1)) + # Nom de cabinet (ex: "CABINET ETXEBARNONDOA") + for m in RE_EXTRACT_CABINET.finditer(full_text): + _add_tokens(m.group(1)) # En-tête "Courrier Epi - NOM, PRENOM" (lettres de sortie) for m in RE_EXTRACT_COURRIER.finditer(full_text): # Format "NOM, PRENOM" : chaque partie est un token de nom @@ -2537,6 +2561,10 @@ def _build_finess_ac(): "la maison", "la residence", "les jardins", "le village", "le parc", "la colline", "au soleil", "en france", + # Expressions médicales homonymes d'établissements FINESS (FP relecteur 2026-03-16) + "long cours", "au long cours", + "le bourg", "le val", "le clos", "le mas", + "les pins", "les chenes", "les oliviers", } try: ac = _ahocorasick.Automaton() diff --git a/config/dictionnaires.yml b/config/dictionnaires.yml index f9391f3..d57755b 100644 --- a/config/dictionnaires.yml +++ b/config/dictionnaires.yml @@ -28,7 +28,11 @@ blacklist: - BAYONNE - '64109' - LABORATOIRE de BIOLOGIE MEDICALE + - REED LES EMBRUNS + - LES EMBRUNS + - EMBRUNS BIDART force_mask_regex: + - '[Ee]mbruns' - 'Centre\s+Hospitalier\s+(?:de\s+(?:la\s+)?)?C[oôÔ]te\s+Basque' - 'Polyclinique\s+C[oôÔ]te\s+Basque\s+Sud' - '13\s*,?\s*Avenue\s+de\s+l.Interne\s+J\.?\s*LOEB\s+BP\s*\d+'