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.5.5.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.5.5-py3-none-any.whl (16.8 MB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cartelis-1.5.5.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.5.5.tar.gz
Algorithm Hash digest
SHA256 446fef67f5be6f2ecbba092a14a0d165843917a8a0fec2ddaab7e93d96b32d05
MD5 b7f2431edb9ec52db734fb67b54871f6
BLAKE2b-256 2391c5f525742c25c2052d38e34f8571c9e97683402b6ca1e0ddf8410ad5bc9b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cartelis-1.5.5-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.5.5-py3-none-any.whl
Algorithm Hash digest
SHA256 1a6be6c1fc167fbfd52b0dd510aab454ec8ad1b330105fa06bc366099a4fdd5b
MD5 83ca622962d72f4fe69ada016ad04bc9
BLAKE2b-256 80f1ef81a9e0952c42d30a205a6dc5ca48093d8d589693bb892f6a6a164c7d15

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