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.8.7.tar.gz (28.9 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.8.7-py3-none-any.whl (29.4 MB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for cartelis-1.8.7.tar.gz
Algorithm Hash digest
SHA256 65fb6577aaad38a60f653e23b0dd92634df1b03ccb921aec8e9c48ab72e8389d
MD5 ba22f321b1c4054bcc8889480b71a556
BLAKE2b-256 2cf46bbd29210d27b3a87911b766ec49f651ecfc7bfb730b53cb0ff14323f93e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cartelis-1.8.7-py3-none-any.whl
  • Upload date:
  • Size: 29.4 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.8.7-py3-none-any.whl
Algorithm Hash digest
SHA256 6f0140174acd37b0e1f186c24fdd4be791088ae7f8be0e8560e33410e5c905a2
MD5 e45d499568d360624bc668d74fcc019c
BLAKE2b-256 6ead341970a4c47d4dea7a12420c1f8074bfcb9581f5d2ca735200d7cbb5b6f5

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