---
from: qwen
to: dom
date: 2026-06-02T15:30:00+02:00
topic: ejnaini-investigation
status: open
priority: normal
references:
  - file: inbox/for-qwen/2026-06-02_15-00_claude_status-paranames-taches.md
  - file: corpus_validation/trackare-BA127127-23135726_BA127127_23135726.pseudonymise.txt
  - file: regression_tests/baseline/trackare-BA127127-23135726_BA127127_23135726.pseudonymise.txt
---

# Investigation EJNAINI — 7 fuites dans trackare-BA127127

## Résultat

**Root cause identifié : le nom composé "NOCENT-EJNAINI" est coupé par un saut de ligne.**

Le format Trackare place le nom sur deux lignes consécutives :
```
... 17/07/2023 07:55 NOCENT-
Ampoule(s) EJNAINI
```

Le trait d'union est en fin de ligne, le second composant sur la ligne suivante.

## Analyse détaillée

| Élément | Statut | Lignes |
|---|---|---|
| `NOCENT-` | ❌ Non masqué (7 occ.) | 544, 563, 579, 607, 624, 680, 704 |
| `EJNAINI` | ❌ Non masqué (7 occ.) | 545, 564, 581, 609, 626, 682, 706 |
| `NOCENT-EJNAINI` (complet) | Jamais détecté | — |

## Pourquoi F1 ne corrige pas

F1 (décomposition noms à trait d'union) ajoute les composants d'un nom composé
à `safe_names` **seulement si** le nom complet est détecté par le NER.

Ici, **aucune des 3 hypothèses de Claude n'est exacte** :

1. ~~NER ne détecte pas "NOCENT-EJNAINI"~~ → **VRAI** (mais pas la cause directe)
2. ~~NameCandidate jamais créé~~ → **VRAI** (mais pas la cause directe)
3. ~~Cross-validation rejette~~ → **VRAI** mais secondaire

**La vraie cause** : le nom n'est jamais assemblé. Le NER (CamemBERT-bio, EDS-Pseudo)
traite le texte ligne par ligne. `"NOCENT-"` en fin de ligne est un token isolé,
`"EJNAINI"` sur la ligne suivante est un autre token. Le tiret n'est pas interprété
comme un joiner inter-lignes.

## Vérifications effectuées

- `grep -n "NOCENT"` : 7 occ., toutes `"NOCENT-"` en fin de ligne, non masqué
- `grep -n "EJNAINI"` : 7 occ., toutes `"EJNAINI"` seul, non masqué
- Les deux ne sont **ni dans INSEE** (noms étrangers) **ni dans le dictionnaire médical**

## Solution

**Paranames** résoudra ce cas : `"EJNAINI"` sera dans le gazetteer `noms_famille_world.txt.gz`
(issu de Wikidata). Il sera reconnu comme nom de famille étranger et masqué
**indépendamment** de la détection NER.

En attendant, un fix court-terme possible :
- Ajouter une regex `force_regex` pour les patterns `"NOCENT-\nEJNAINI"` ou `"NOCENT-"` + `"EJNAINI"` adjacents
- Ou ajouter "EJNAINI" au dictionnaire des noms à masquer manuellement

## Conclusion

**Hypothèse confirmée de Claude** : paranames est la solution appropriée.
Quand le gazetteer sera intégré, EJNAINI sera masqué.

Les 7 fuites NOCENT- sont un problème similaire — "NOCENT" est un nom basque
non couvert par INSEE. Paranames devrait aussi le couvrir.

---

— Qwen
