diff --git a/anonymizer_core_refactored_onnx.py b/anonymizer_core_refactored_onnx.py index d42d359..f1e5804 100644 --- a/anonymizer_core_refactored_onnx.py +++ b/anonymizer_core_refactored_onnx.py @@ -572,6 +572,17 @@ RE_EXTRACT_NOM_UTILISE = re.compile( r"([A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇÑ][A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇÑa-zéèàùâêîôûäëïöüçñ\-\' ]+?)(?:\s*$)", re.MULTILINE, ) +# F3 — capture du nom après "Nom usuel :" : le label peut être suivi de la +# date de naissance ou autres champs avant le nom. On skippe les lignes ne +# commençant pas par une majuscule (date au format DD/MM/YYYY, placeholders, +# champs vides) puis on capture le premier token en MAJUSCULES (≥4 chars). +# Cas typique BACTERIO : "Nom usuel :\n14/03/1985\nOYARCABAL". +RE_EXTRACT_NOM_USUEL = re.compile( + r"Nom\s+usuel\s*:\s*\n" + r"(?:[^A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇÑ\n][^\n]*\n)*" + r"([A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇÑ][A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇÑ\-\']{3,})", + re.MULTILINE, +) RE_EXTRACT_PRENOM = re.compile( r"Pr[ée]nom\s+(?:de\s+naissance|utilis[ée])\s*:\s*" r"([A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇÑ][A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇÑa-zéèàùâêîôûäëïöüçñ\-\' ]+?)(?:\s*$)", @@ -2140,6 +2151,9 @@ def _extract_document_names(full_text: str, cfg: Dict[str, Any]) -> Tuple[set, s _add_tokens_force_all(m.group(1), "RE_EXTRACT_NOM_NAISSANCE", "high") for m in RE_EXTRACT_NOM_UTILISE.finditer(full_text): _add_tokens_force_all(m.group(1), "RE_EXTRACT_NOM_UTILISE", "high") + # F3 — "Nom usuel :" + ligne suivante (skip date intermédiaire) + for m in RE_EXTRACT_NOM_USUEL.finditer(full_text): + _add_tokens_force_all(m.group(1), "RE_EXTRACT_NOM_USUEL", "high") for m in RE_EXTRACT_NOM_PRENOM.finditer(full_text): _add_tokens_force_all(m.group(1), "RE_EXTRACT_NOM_PRENOM", "high") for m in RE_EXTRACT_PRENOM.finditer(full_text):