fix(regex): RE_HOPITAL_VILLE accepte les ALL-CAPS (CENTRE HOSPITALIER)
Le pattern type utilisait [Cc]entre\s+[Hh]ospitalier : seule la 1re lettre de chaque mot était ambidextre, la suite devait être en minuscules. "CENTRE HOSPITALIER COTE BASQUE" (tout majuscule) échappait → compensé par regex YAML force_mask_regex "Centre\s+Hospitalier\s+…". Fix : utiliser (?i:…) case-insensitive localement sur les sous-motifs "type d'établissement" et "déterminants" (de, du, la…) tout en gardant le nom propre strict (1re lettre majuscule obligatoire). Évite les FP tout en capturant les majuscules complètes. Cas validés : - "Centre Hospitalier de Bayonne" → match (inchangé) - "CENTRE HOSPITALIER COTE BASQUE" → match (nouveau) - "POLYCLINIQUE CÔTE BASQUE SUD" → match (nouveau) - "CLINIQUE SAINT-JEAN" → match (nouveau) - "examen hôpital de Bordeaux" → pas de match (exclusion préservée) Test YAML stripped : CENTRE HOSPITALIER et COTE BASQUE sont maintenant masqués par ETAB (regex/AC) au lieu de force_term. Après ce fix + Fix #4, on peut retirer les regex "Centre\s+Hospitalier…" et "Polyclinique…" du YAML. Non-régression : 122 hits sur trackare-18007562 avec YAML complet. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1055,12 +1055,16 @@ RE_ETABLISSEMENT = re.compile(
|
||||
)
|
||||
RE_HOPITAL_VILLE = re.compile(
|
||||
r"(?<![Ee]xamen )"
|
||||
r"\b((?:[Hh]ôpital|[Cc]linique|[Pp]olyclinique|[Cc]entre\s+[Hh]ospitalier"
|
||||
r"|[Cc]entre\s+[Mm][ée]dical|[Cc]entre\s+[Dd]e\s+[Ss]oins|[Mm]aison\s+[Dd]e\s+[Ss]anté"
|
||||
r"|[Mm]aison\s+[Dd]e\s+[Rr]etraite|[Rr]ésidence|[Ff]oyer|[Pp]harmacie)"
|
||||
r"\s+(?:de\s+|d['']\s*|du\s+|des\s+)?(?:la\s+|le\s+|l['']\s*|les\s+)?"
|
||||
# Type d'établissement : case-insensitive sur le groupe (?i:...) pour capturer
|
||||
# aussi bien "Centre Hospitalier" que "CENTRE HOSPITALIER" (documents ALL-CAPS).
|
||||
r"\b((?i:hôpital|clinique|polyclinique|centre\s+hospitalier"
|
||||
r"|centre\s+médical|centre\s+de\s+soins|maison\s+de\s+santé"
|
||||
r"|maison\s+de\s+retraite|résidence|foyer|pharmacie)"
|
||||
# Déterminants : case-insensitive aussi (de, DE, De… du, DU…).
|
||||
r"\s+(?i:de\s+|d['']\s*|du\s+|des\s+)?(?i:la\s+|le\s+|l['']\s*|les\s+)?"
|
||||
# Nom propre : toujours commence par une majuscule, queue accepte mélange.
|
||||
r"(?:[A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇ][A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇa-zéèàùâêîôûäëïöüç\-']+)"
|
||||
r"(?:\s+(?:de\s+|d['']\s*|du\s+|des\s+)?(?:la\s+|le\s+|l['']\s*|les\s+)?"
|
||||
r"(?:\s+(?i:de\s+|d['']\s*|du\s+|des\s+)?(?i:la\s+|le\s+|l['']\s*|les\s+)?"
|
||||
r"[A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇ][A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇa-zéèàùâêîôûäëïöüç\-']+)*)",
|
||||
)
|
||||
RE_SERVICE = re.compile(
|
||||
|
||||
Reference in New Issue
Block a user