Skip to main content

Normalisation des noms et prénoms (nettoyage, patterns, détection d’anomalies)

Project description

cartelis.name_normalizer

Bibliothèque Python de nettoyage et normalisation de noms et prénoms, conçue pour les équipes CRM et data.


Installation

pip install cartelis

Fonctionnement général

La bibliothèque applique une pipeline en 4 étapes sur les colonnes nom et prenom d'un DataFrame :

DataFrame brut
     │
     ▼
1. Nettoyage          → suppression accents, ponctuation, espaces multiples
     │
     ▼
2. Overlap cleaning   → résolution chevauchements nom/prénom (ex: "Jean Jean" → "Jean")
     │
     ▼
3. Pattern detection  → détection du schéma de chaque valeur (W, L, H, P, A, S)
     │
     ▼
4. Normalisation      → application des règles définies dans un fichier Excel (selon le mode)
     │
     ▼
DataFrame enrichi

Schémas de tokens

Classe Description Exemple
W Mot alphabétique (≥2 lettres) MARIE
L Initiale (1 lettre) J
H Mot avec tiret ANNE-MARIE
A Mot avec apostrophe O'CONNOR
P Particule DE, DU, LA
S Caractère spécial ou chiffre MARIE123

Utilisation

Normalisation de base

import pandas as pd
from cartelis import normalize_names

df = pd.DataFrame({
    "nom":    ["DE LA CROIX", "MARTIN3", "J M"],
    "prenom": ["MARIE PIER",  "JEAN",    "Anne-Marie"]
})

df_result = normalize_names(df, mode="light")

Avec inplace

# Sans inplace — retourne une copie, df original intact
df_result = normalize_names(df, mode="light")

# Avec inplace — modifie df directement
normalize_names(df, mode="light", inplace=True)

Contrôle des étapes

# Désactiver certaines étapes
df_result = normalize_names(
    df,
    mode="light",
    nettoyage=True,
    overlap_cleaning=False,
    pattern_detection=True,
    normalization=True,
)

Modes disponibles

from cartelis import list_modes
list_modes()  # → ['light', 'heavy']
Mode Description
light Normalisation standard — conserve les prénoms composés, concat avec prenom2 si tronqué
heavy Normalisation stricte — garde uniquement le premier prénom

Vérification et correction des prénoms

Vérifier si les prénoms existent dans le dictionnaire

from cartelis import verify_prenom

df_verified = verify_prenom(df, mode="light")
# Ajoute une colonne "prenom_all_exist" : "oui" ou "non"

Rapprocher les prénoms mal orthographiés

from cartelis import rapprocher_prenom

df_corrected = rapprocher_prenom(df, mode="light", THRESHOLD=90)
# Ajoute :
# - prenom_corrige      : prénom corrigé
# - correction_faite    : True si une correction a été appliquée
# - detail_corrections  : détail token par token

Gestion des règles

Les règles de normalisation sont stockées dans des fichiers Excel (regles_light.xlsx, regles_heavy.xlsx) inclus dans le paquet. Vous pouvez les consulter, les modifier et les réinitialiser.

Visualiser les règles

from cartelis import show_rules

show_rules("prenom", mode="light")   # retourne un DataFrame
show_rules("nom", mode="heavy")

Modifier une règle existante

from cartelis import update_rule

# Les modifications sont sauvegardées en local (dans votre dossier courant)
update_rule("prenom", pattern="*S*", action="keep_as_is", mode="light")

Ajouter une nouvelle règle

from cartelis import add_rule

add_rule(
    target="prenom",
    pattern="W-W-W",
    action="keep_as_is",
    colonne_source="prenom_clean",
    mode="light",
    regle_id="R1",
    description_pattern="3 mots alphabétiques",
    exemple_avant="MARIE ANNE CLAIRE",
    exemple_apres="MARIE ANNE CLAIRE",
)

Réinitialiser les règles par défaut

from cartelis import reset_rules

reset_rules(mode="light")   # supprime le fichier local, retour aux règles du paquet

Actions disponibles

Action Description
keep_as_is Conserver tel quel
concat_prenom2 Concaténer avec prenom2 si disponible
concat_nom_usage Concaténer avec nomUsage si disponible
replace_by_nom_usage Remplacer par nomUsage si disponible
filter_dict_tokens Garder uniquement les tokens présents dans le dictionnaire
drop_truncated_last Supprimer le dernier token s'il est tronqué (absent du dictionnaire)
clean_s_subtokens Nettoyer les sous-tokens contenant des caractères spéciaux
drop_final_LP Supprimer les tokens finaux de type L (initiale) ou P (particule)
keep_first_token Garder uniquement le premier prénom (mode heavy)
insert_apostrophe_after_initial Insérer une apostrophe après l'initiale (mode heavy)

Colonnes ajoutées par normalize_names

Colonne Description
nom_clean Nom après nettoyage de base
prenom_clean Prénom après nettoyage de base
overlap_action Action appliquée lors du traitement des chevauchements
schema_nom Schéma détecté pour le nom (ex: W, W-P, H)
schema_prenom Schéma détecté pour le prénom
nom_normalized Nom après normalisation complète
prenom_normalized Prénom après normalisation complète

Structure du projet

cartelis/
├── __init__.py
├── name_normalizer/
│   ├── __init__.py
│   ├── module.py          ← normalize_names, verify_prenom, rapprocher_prenom
│   ├── rule_engine.py     ← chargement et matching des règles
│   ├── rules_manager.py   ← show/update/add/reset rules
│   ├── actions.py         ← fonctions d'action (communes à tous les modes)
│   ├── action_map.py      ← dictionnaire nom → fonction
│   └── data/
│       ├── base_prenoms.csv
│       ├── regles_normalisation_light.xlsx
│       └── regles_normalisation_heavy.xlsx

Dépendances

pandas>=1.3
numpy>=1.21
openpyxl>=3.0
rapidfuzz>=3.0

Licence

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cartelis-1.6.0.tar.gz (16.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cartelis-1.6.0-py3-none-any.whl (16.8 MB view details)

Uploaded Python 3

File details

Details for the file cartelis-1.6.0.tar.gz.

File metadata

  • Download URL: cartelis-1.6.0.tar.gz
  • Upload date:
  • Size: 16.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for cartelis-1.6.0.tar.gz
Algorithm Hash digest
SHA256 1a9c7fa0d0cea872aef6dc1b8e05760362ee80fb0f46580a014ae555e48a3090
MD5 ad47d32807bc0421ef5f205d4592903f
BLAKE2b-256 ee00dc30a5d0fcbb114cdec385f91214d04419fd2a8a3449c1651a65e67139dd

See more details on using hashes here.

File details

Details for the file cartelis-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: cartelis-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 16.8 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for cartelis-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b3090f8fa4172ef108904720c420a75e77e9b12f1120a9d77d021f47f392afbe
MD5 63ccd223859bbbc32445a68ed9535811
BLAKE2b-256 63f77e9aa8698fb06a08217358bc700a31da78f2a301a068d42efc21a5e5066b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page