-
-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
Les noms issus de la base SIRENE sont intégralement en majuscules et sans accents, ce qui n'est pas très lisible ni agréable à lire.
Gemini 3 propose ce script pour les améliorer (base à améliorer) :
import polars as pl
# 1. Préparation des dictionnaires de correspondance
# On gère les accents en minuscule pour le remplacement initial
accents_map = {
"communaute": "communauté",
"societe": "société",
"etablissement": "établissement",
"region": "région",
"regional": "régional",
"federation": "fédération",
"electricite": "électricité",
"amenagement": "aménagement",
"departemental": "départemental",
"departement": "département",
"cooperative": "coopérative",
"metropole": "métropole",
"cooperative": "coopérative",
"agglomeration": "agglomération",
"interet": "intérêt",
"sante":"santé",
"general": "général",
"hopital": "hôpital",
"hopitaux": "hôpitaux",
"secretariat": "secrétariat",
"ministere": "ministère",
"immobiliere": "immobilière",
}
# Liste des mots à forcer en minuscules (s'ils ne sont pas en début de phrase)
low_words = ["De", "Du", "Des", "Le", "La", "Les", "Au", "Aux", "Et", "En", "Pour", "Sur", "Communes", "Société", 'Social', 'Sociale', 'Syndicat', 'Union', 'Service', 'Services', 'Indivision', "Rue", "Of", "The", "Mairie", "Hospitalier", "Hospitaliers", "Public", "Publique", "Agence", "Traitement", "Grand", "Universitaire", "Mixte", "Pays", "Incendie", "Secours", "Gendarmerie", "Commissariat", "Urbaine", "Eau", "Territoriale", "Territoire", "Intercommunale", "Assainissement", "Institut", "Gestion", "Produits", "Estuaire", "Bassin", "Action", "Pompiers", "Police", "Logement", "Nationale", "National", "Immobilier", "Valorisation", "Collectif", "Collective", "Scientifique", "Construction"]
low_words.extends()
# Liste des acronymes à forcer en majuscules
acronyms = ["Sa", "Sarl", "Sas", "Sci", "Eurl", "Sncf", "Cc", "Ca", "Sce", "Gip", "Dir", "Cu", "Cnrs", "Epi"]
def apply_sirene_casing(column_name):
expr = pl.col(column_name).str.to_lowercase()
# Étape 1 : Rétablir les accents (en minuscules)
expr = expr.str.replace_many(accents_map)
# Étape 2 : Mettre une majuscule à chaque mot (Title Case)
expr = expr.str.to_titlecase()
# Étape 3 : Forcer en minuscules les articles/mots admin s'ils sont précédés d'un espace
# Le lookbehind (?<= ) garantit qu'on ne touche pas au premier mot de la chaîne
for word in low_words:
expr = expr.str.replace_all(rf"(?<= ){word}\b", word.lower())
# Étape 4 : Forcer les acronymes en majuscules
for acro in acronyms:
expr = expr.str.replace_all(rf"\b{acro}\b", acro.upper())
# Étape 5 : Nettoyage final des apostrophes (ex: L'administration)
expr = expr.str.replace_all(r"([LlDd])' ", r"$1'")
return expr
# --- Exemple d'utilisation ---
df = pl.DataFrame({
"NOM": [
"COMMUNAUTE DE COMMUNES DU LIMOUXIN",
"SOCIETE GENERALE D'ELECTRICITE",
"FEDERATION DES CHASSEURS DU GARD",
"GARAGE DU MIDI SARL"
]
})
df = df.with_columns(
NOM_PROPRE = apply_sirene_casing("NOM")
)
print(df)Metadata
Metadata
Assignees
Labels
No labels
Projects
Status
Backlog