feat(detect): F2 capture du nom précédant le label "Nom usuel :"
Complète F3 (qui captait le nom APRÈS "Nom usuel :"). Dans certains
comptes-rendus type BACTERIO, l'identité patient sous forme
"NAME Prenom1 Prenom2" apparaît juste AVANT le label, sans label devant.
Cas typique BACTERIO 23232115 :
10.40
SIMONET Marie lise ← cette ligne, pas attrapée par F3
Nom usuel :
14/03/1985
OYARCABAL ← capturée par F3
Ajout de RE_EXTRACT_NAME_BEFORE_NOM_USUEL qui regarde la ligne
précédant directement le label "Nom usuel :" : si elle ressemble à
"MAJUSCULES Prenom Prenom" (NAME ≥4 chars + 1 à 3 tokens
en suite), on la capture en contexte "high" (champ DPI quasi-certain).
Validation sur exemple synthétique :
- F3 OYARCABAL : ['OYARCABAL'] ✅
- F2 SIMONET : ['SIMONET Marie lise'] ✅
Reste à valider sur retraitement audit_30 complet.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -583,6 +583,14 @@ RE_EXTRACT_NOM_USUEL = re.compile(
|
||||
r"([A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇÑ][A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇÑ\-\']{3,})",
|
||||
re.MULTILINE,
|
||||
)
|
||||
# F2 — capture du nom utilisé PRÉCÉDANT le label "Nom usuel :".
|
||||
# Cas typique BACTERIO : la ligne juste avant "Nom usuel :" contient
|
||||
# l'identité patient sous forme "NAME Prenom1 Prenom2" sans label devant
|
||||
# (ex: "SIMONET Marie lise\nNom usuel :"). On capture cette ligne entière.
|
||||
RE_EXTRACT_NAME_BEFORE_NOM_USUEL = re.compile(
|
||||
r"^([A-ZÉÈÀÙÂÊÎÔÛÄËÏÖÜÇÑ]{4,}(?:\s+[A-Za-zÀ-Ÿ\-\']+){1,3})\s*\n\s*Nom\s+usuel\s*:",
|
||||
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*$)",
|
||||
@@ -2154,6 +2162,9 @@ def _extract_document_names(full_text: str, cfg: Dict[str, Any]) -> Tuple[set, s
|
||||
# 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")
|
||||
# F2 — ligne "NAME Prenom Prenom" précédant directement "Nom usuel :"
|
||||
for m in RE_EXTRACT_NAME_BEFORE_NOM_USUEL.finditer(full_text):
|
||||
_add_tokens_force_all(m.group(1), "RE_NAME_BEFORE_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):
|
||||
|
||||
Reference in New Issue
Block a user