Files
anonymisation/data/paranames/EXTRACTION.md
Domi31tls 745ebd93fb feat(detect): paranames gazetteer Wikidata (1.4M noms + 502K prénoms)
Intégration de paranames (bltlab/paranames v2024.05.07.0, CC BY 4.0)
pour étendre la couverture du gazetteer aux noms étrangers en France
absents d'INSEE (basques, maghrébins, asiatiques, africains, etc.).

## Citation

Sälevä, J., & Lignos, C. (2024). ParaNames 1.0: Creating an Entity Name
Corpus for 400+ Languages using Wikidata. In Proceedings of LREC-COLING
2024. https://aclanthology.org/2024.lrec-main.1103/

## Fichiers

- scripts/build_paranames_gazetteer.py — script reproductible
- data/paranames/README.md — attribution + procédure
- data/paranames/EXTRACTION.md — workflow reproductible
- data/paranames/noms_famille_world.txt.gz — 1 379 609 noms (4.3 Mo gz, <30 Mo RAM)
- data/paranames/prenoms_world.txt.gz — 502 302 prénoms (1.4 Mo gz)

## Volume final

Réduction significative vs estimation initiale (~80 Mo) grâce à NFKD+A-Z
qui fusionne toutes les translittérations Wikidata (cyrilliques, arabes,
chinoises…) en latin de base. Résultat : 4.3 Mo gz total, ~30 Mo RAM.

## Spot-check

| Nom | Présent ? | Note |
|---|---|---|
| EJNAINI |  | Le cas de fuite résiduelle audit_30 — devrait être fixé |
| OYARZABAL |  | Variante basque |
| OYARCABAL |  | Orthographe franco-espagnole rare, absente Wikidata |
| NGUYEN, SCHMIDT, OBAMA, NAKAMURA, GARCIA, MARTIN, BERNARD |  | OK |

## Intersection INSEE

- ∩ INSEE FR : 130 340 noms (59.5 % de couverture INSEE)
- Gain net : 1 249 269 noms supplémentaires (focus diaspora / DOM-TOM)

## Risque FP identifié

Quelques mots français courants sont présents dans paranames (origine :
noms d'autres langues) : VOIR, ALLO. MIDI déjà filtré par stopwords.
Impact à mesurer sur retraitement audit_30. Si nécessaire, ajout d'un
filtre dictionnaire français à apporter ultérieurement.

## Source

- Dépôt : https://github.com/bltlab/paranames
- Mirror HF (utilisé) : https://huggingface.co/datasets/imvladikon/paranames
- License : CC BY 4.0
- Origine : Wikidata (entités publiques) — pas de PII fuitée

REJETÉ comme alternative : philipperemy/name-dataset (origine = leak
Facebook 2021, RGPD bloquant pour produit médical).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 16:02:54 +02:00

3.1 KiB

Procédure d'extraction — gazetteer paranames

Vue d'ensemble

Le script scripts/build_paranames_gazetteer.py télécharge le dataset paranames depuis HuggingFace, filtre les entités de type PER, normalise les noms (NFKD UPPERCASE A-Z) et produit deux gazetteers compressés.

Pré-requis

  • Python ≥ 3.10
  • Venv du projet activé : source .venv/bin/activate
  • Paquets : datasets, huggingface_hub, pyarrow, pandas (déjà présents dans requirements.txt).
  • Connexion réseau pour le premier téléchargement (~1.33 GB).
  • ~3 GB de cache HuggingFace disponibles.
  • ~1 GB de RAM (le script lit le parquet par batches de 64 K lignes).

Lancement

cd /home/dom/ai/anonymisation
source .venv/bin/activate
python scripts/build_paranames_gazetteer.py

Options :

  • --hf-cache /chemin : forcer un cache custom (défaut : ~/.cache/huggingface).
  • --limit N : ne traiter que N lignes (debug uniquement).

Étapes internes du script

  1. Téléchargement via huggingface_hub.hf_hub_download du parquet data/train.parquet du repo imvladikon/paranames. Le cache HF est réutilisé (idempotent).
  2. Chargement du BDPM stop-words (data/bdpm/medicaments_stopwords.txt, 7 312 tokens normalisés en UPPER A-Z) pour filtrer les noms qui sont en fait des médicaments.
  3. Itération par batches (pyarrow.parquet.ParquetFile.iter_batches) sur les colonnes name et type uniquement. Filtre type == "PER".
  4. Split de chaque name sur espaces et séparateurs courants (SPLIT_CHARS).
  5. Heuristique nom/prénom :
    • dernier token → nom de famille candidat
    • tokens précédents → prénoms candidats
    • cas mononyme (1 seul token) : considéré comme nom de famille.
  6. Normalisation : NFKD → strip diacritiques → UPPER → conserver uniquement A-Z (chars latins de base).
  7. Filtres anti-bruit :
    • longueur ≥ 3 caractères
    • longueur ≤ 25 caractères
    • non présent dans la BDPM stop-words.
  8. Écriture triée alphabétique en .txt.gz compresslevel=9.

Volumes attendus (ordre de grandeur)

  • Lignes parquet totales : ~124 M
  • Lignes PER après filtre : ~82 M
  • Noms famille uniques (après dédup + normalisation) : quelques centaines de milliers à quelques millions.
  • Prénoms uniques : idem.

Régénération (mise à jour)

Si une nouvelle version de paranames est publiée, supprimer le cache HF correspondant :

rm -rf ~/.cache/huggingface/datasets--imvladikon--paranames/
python scripts/build_paranames_gazetteer.py

ou supprimer simplement les .txt.gz cibles et relancer (le download réutilise le cache si la version est inchangée).

Vérification rapide

zcat data/paranames/noms_famille_world.txt.gz | wc -l
zcat data/paranames/prenoms_world.txt.gz   | wc -l
zcat data/paranames/noms_famille_world.txt.gz | grep -E "^(OYARCABAL|EJNAINI|NGUYEN|SCHMIDT|OBAMA)$"

Licence

paranames est sous CC BY 4.0. Les fichiers dérivés (*.txt.gz) héritent de cette licence et doivent être redistribués avec attribution (voir README.md).