diff --git a/anonymizer_core_refactored_onnx.py b/anonymizer_core_refactored_onnx.py index b595899..5346d58 100644 --- a/anonymizer_core_refactored_onnx.py +++ b/anonymizer_core_refactored_onnx.py @@ -1903,9 +1903,13 @@ def _extract_trackare_identity(full_text: str) -> Tuple[set, List[PiiHit], set, force_names: set = set() # noms issus de contextes structurés (DR., Signé, etc.) → bypass stop words def _add_candidate(token: str, source: str, strength: str, bypass: bool): - """Ajoute un NameCandidate à la liste.""" + """Ajoute un NameCandidate à la liste. + Accepte les prénoms courts 3 chars (Ute, Eva, Léo…) si bypass=True + (contexte Dr/Mme fort) ET majuscule initiale + alpha pur.""" token = token.strip(" .-'(),") - if len(token) < 4: + if len(token) < 3: + return + if len(token) == 3 and not (bypass and token[0].isupper() and token.isalpha()): return candidates.append(NameCandidate( token=token, source=source, @@ -2220,9 +2224,13 @@ def _extract_document_names(full_text: str, cfg: Dict[str, Any]) -> Tuple[set, s candidates: List[NameCandidate] = [] def _add_candidate(token: str, source: str, strength: str, bypass: bool): - """Ajoute un NameCandidate à la liste (dédupliqué par token+source).""" + """Ajoute un NameCandidate à la liste (dédupliqué par token+source). + Accepte les prénoms courts 3 chars (Ute, Eva, Léo…) si bypass=True + (contexte Dr/Mme fort) ET majuscule initiale + alpha pur.""" token = token.strip(" .-'") - if len(token) < 4: + if len(token) < 3: + return + if len(token) == 3 and not (bypass and token[0].isupper() and token.isalpha()): return candidates.append(NameCandidate( token=token, source=source, @@ -2270,12 +2278,21 @@ def _extract_document_names(full_text: str, cfg: Dict[str, Any]) -> Tuple[set, s Après Dr/Mme, tous les tokens sont des noms — même s'ils sont homonymes de termes médicaux (ex: Dr Laurence MASSE). + + Accepte les prénoms courts 3 chars (Dr Ute, Dr Eva, Dr Léo) : le + contexte Dr/Mme est suffisamment fort pour lever le filtre de + longueur, à condition que le token soit alpha et commence par + une majuscule. 2 chars reste filtré (trop ambigu : initiales). """ _add_compound(match_str) tokens = match_str.split() for token in tokens: token = token.strip(" .-'") - if len(token) < 4: + if len(token) < 3: + continue + # 3 chars : accepter uniquement si majuscule initiale + alpha + # (évite "Les", "Des" mais accepte "Ute", "Eva"). + if len(token) == 3 and not (token[0].isupper() and token.isalpha()): continue if token.upper() in wl_sections or token in wl_phrases: continue