Skip to main content

Convertisseur hybride français ↔ louchébem (largonji des bouchers) — Hybrid French to louchébem (butcher's slang) converter

Project description

🔪🥩 largonji

PyPI version Python 3.10+ License: WTFPL

« Larlépem-vous louchébem? » — Convertisseur hybride français ↔ louchébem

🇬🇧 English version / Version anglaise →

Un convertisseur Python moderne pour transformer du français en louchébem, l'argot historique des bouchers parisiens.

Le louchébem est la variante principale du largonji, une famille de procédés de déformation linguistique utilisés en argot français (incluant aussi le verlan, le javanais...).

Ce package implémente le louchébem avec une approche hybride : dictionnaire de termes historiques authentiques + transformation algorithmique pour les mots inconnus.


🚀 Installation

# Avec uv (recommandé)
uv add largonji

# Avec pip
pip install largonji

💻 Utilisation rapide

from largonji import LouchebemConverter

# Créer un convertisseur et transformer du texte
converter = LouchebemConverter()
print(converter.convert_text("Bonjour le boucher"))
# → Lonjourbem le loucherbem

📖 Table des matières


🥩 Qu'est-ce que le louchébem ?

Le louchébem est la principale variante du largonji, une famille de procédés de déformation linguistique développés en argot français. Le louchébem a été créé et popularisé par les bouchers parisiens au XIXe siècle.

Le mot « louchébem » lui-même vient de la transformation de « boucher » selon les règles du procédé.

📜 Un peu d'histoire

Le largonji apparaît dans l'argot des classes populaires parisiennes dès la fin du XVIIIe ou début du XIXe siècle. Les premiers mots recensés incluent :

  • lomben (← bon) dans un glossaire argotique de 1821
  • La Lorcefé (← La Force, une prison parisienne) dans les Mémoires de Vidocq (1828-1829)
  • loucherbem (← boucher) attesté vers 1876

Certains mots issus du louchébem sont entrés dans le langage français courant :

  • loufoque (← fou) : bizarre, farfelu
  • larfeuille (← portefeuille, billets) : l'argent
  • à loilpé (← à poil) : nu

🎯 Le principe de base

Le procédé du louchébem suit une règle simple :

  1. Remplacer la première consonne (ou groupe de consonnes) par « l »
  2. Déplacer cette consonne à la fin du mot
  3. Ajouter un suffixe (souvent en rapport avec la consonne déplacée)

Exemples :

  • boucher → loucherbem
  • jargon → largonji
  • prix → liprem (groupe "pr" déplacé ensemble)

🔧 La méthode naïve

Une implémentation basique du louchébem pourrait ressembler à ceci :

def louchebem_naif(mot):
    """Version simplifiée (ne fonctionne que pour les cas basiques)"""
    if not mot:
        return mot
    
    # Extraire la première consonne
    premiere_consonne = mot[0]
    reste = mot[1:]
    
    # Construire le mot transformé
    return 'l' + reste + premiere_consonne + 'em'

# Exemples
print(louchebem_naif("boucher"))  # → loucherbem ✓
print(louchebem_naif("prix"))     # → lixprem ✗ (devrait être liprem)
print(louchebem_naif("entendre")) # → lntendree ✗ (devrait être enlendreté)

⚠️ Limites de l'approche naïve

Cette méthode ne gère pas :

  • Les groupes de consonnes (pr, tr, fr, etc.)
  • Les mots commençant par une voyelle
  • Les consonnes muettes en fin de mot (discret → discrè)
  • La phonétique française (qu, gu, s/z, etc.)
  • Les suffixes variés selon la consonne
  • Les mots historiques avec orthographe établie

Notre implémentation hybride résout tous ces problèmes ! 🎉


✨ Choix d'implémentation

Le louchébem n'a jamais été un langage standardisé : tous les bouchers ne parlaient pas exactement le même argot. Les suffixes en particulier variaient d'une personne à l'autre, et le langage évoluait volontairement pour rester moins évident aux non-initiés (aspect non-déterministe). Certains cas ne sont pas vraiment clairs dans les sources historiques, notamment le traitement des mots commençant par une voyelle.

Cette implémentation repose donc sur des choix assumés : elle se base sur les sources disponibles et sur ce qui sonne le mieux à l'oreille. Cette section détaille ces décisions techniques.

1. 📚 Approche hybride : Dictionnaire + Algorithme

Problème : Certains mots de louchébem ont une orthographe historique établie qui peut différer de la transformation algorithmique.

Solution :

  • Dictionnaire de ~100 mots historiques authentiques (sources : Lorédan Larchey 1858, Gaston Esnault 1965, louchebem.fr)
  • Transformation algorithmique pour les mots non répertoriés
  • Priorité au dictionnaire quand le mot existe
# Exemple : "argot" est dans le dictionnaire
converter.convert_text("argot")  # → largomuche (forme historique)

# "robot" n'existe pas dans le dictionnaire
converter.convert_text("robot")  # → lobotrem (transformation algorithmique)

2. 🛡️ Conservation sélective des mots

Problème : Transformer tous les mots rend le texte illisible. Quels mots préserver ?

Solution : Système de règles de préservation désactivables individuellement :

Catégorie Exemples Raison
Mots-outils le, la, de, un, et, à Structure grammaticale
Verbes ultra-courants être, avoir, faire, aller Lisibilité
Interjections oh, ah, hein, ben Expression orale
Nombres & dates 123, XIV, 31/12/2023 Information précise
Noms propres Paris, Marie Identification
Acronymes SNCF, UNESCO Sigles
Déjà en louchébem loucherbem, louf Éviter double transformation
# Désactiver certaines préservations
config = LouchebemConfig(
    preserve_stopwords=True,        # Garder "le", "la", etc.
    preserve_proper_nouns=False,    # Transformer "Paris" aussi !
    preserve_numbers=True,          # Garder "123"
)
converter = LouchebemConverter(config=config)

3. 🔤 Mots commençant par une voyelle

Problème : Comment transformer "entendre", "attention", "orange" qui commencent par une voyelle ?

Solution : Chercher la consonne d'attaque (premier groupe de consonnes après le son voyelle initial). C'est un choix d'implémentation — les sources historiques ne sont pas claires sur ce cas. Cette approche sonne mieux à l'oreille et permet de garder des mots ne commençant pas tous par "l" dans un texte, ce qui est plus agréable à lire.

"entendre"   "en" (voyelle nasale) + "t" (attaque) + "endre"
             en + l + endre + t + és
             "enlendretès"

"attention"  "a" + "t" (simplifié de "tt") + "ention"
             a + l + ention + t + és
             "alentiontès"

"orange"     "o" + "r" + "ange"
             o + l + ange + r + em
             "olangerem"

Astuce : Le code gère les voyelles nasales ("an", "en", "in", "on", "un") comme des sons voyelle.


4. 🎯 Suffixes pondérés par type de consonne

Problème : Tous les suffixes ne sont pas équiprobables. Historiquement, certains suffixes correspondent mieux à certaines consonnes.

Solution : Sélection aléatoire pondérée de suffixes organisés par consonnes, basée sur l'usage historique.

# Exemples de suffixes pour différentes consonnes
D   (35%), dem (25%), doc (5%), dique (5%), ...
P  pem (30%), puche (25%), poc (15%), pique (5%), ...
F  fès (35%), foc (20%), fem (15%), fique (10%), ...

Chaque suffixe contient déjà sa consonne pour garantir l'harmonie phonétique.


5. 🎵 Groupes de consonnes multiples

Problème : Comment traiter "prix", "train", "fromage" qui commencent par 2+ consonnes ?

Solution : Extraire le groupe complet de consonnes avant la première voyelle et le déplacer en bloc.

"prix"     "p" + "r" + "ix"  l + ix + pr + em  "liprem"
"train"    "t" + "r" + "ain"  l + ain + tr + em  "laintrem"
"fromage"  "f" + "r" + "omage"  l + omaj + fr + é  "lomajfré"

Détail technique : Les clusters sont toujours conservés intégralement, même si le suffixe contient déjà l'une des lettres (ex : "pl" reste "pl", pas seulement "p").


6. 🔇 Consonnes muettes et ajustements phonétiques

Problème : Le français écrit ≠ français oral. Comment gérer les consonnes muettes ?

Solution : Détection et suppression des consonnes muettes avec ajustement des voyelles.

"discret"   discrè + t (muet retiré, eè pour préserver le son)
            l + iscrè + d + oc
            "liscrèdoc"

"employée"  employé (éeé, le 'e' supplémentaire est muet)
            e + l + oyé + pl + é
            "emloyéplé"

"parler"    parlé (eré, son identique)
            l + arlé + p + em
            "larlépem"

Règles appliquées :

  • -et (discret → discrè)
  • -ent-en (moment → momen, le 't' est muet)
  • -er (verbes infinitifs)
  • -ée (le 'e' supplémentaire est redondant)

7. 🎲 Simplification des consonnes doublées

Problème : Que faire avec "attention" (deux 't') ? Et si on crée des doublons (pl + lé = pllé) ?

Solution :

  • Avant déplacement : Simplifier les consonnes doublées (tt→t, nn→n, mm→m)
  • Après construction : Simplifier tout doublon créé accidentellement
"attention"  "a" + "tt"  "a" + "t" (simplifié) + "ention"
             alentiontès

"employée"   "em" + "pl" + "oyé" 
             em + l + oyé + pl + é
             emloyéplé

8. 📝 Gestion des apostrophes (élisions)

Problème : Comment traiter "l'argot", "d'autre", "j'aime" ?

Solution : Règles spécifiques selon le préfixe :

# Cas spécial : l' + mot → fusion
"l'argot"    "largot"  "largomuche" (puis cherche dans dictionnaire)
"l'origine"  "lorigine"  "loriginelé"

# Autres apostrophes : préserver le préfixe
"d'autre"  "d'" + "autre" transformé  "d'auletrem"
"j'aime"   "j'" + "aime" transformé  "j'ailemem"

Logique : Fusionner avec 'l' fait sens car le mot va commencer par 'l' de toute façon !


⚙️ Configuration avancée

Le convertisseur offre de nombreuses options de configuration :

from largonji import LouchebemConfig, LouchebemConverter

# Configuration maximale (comportement par défaut)
config = LouchebemConfig.maximal()

# Configuration minimale (transforme presque tout)
config = LouchebemConfig.minimal()

# Configuration pour tests reproductibles
config = LouchebemConfig.for_testing(seed=42)

# Configuration personnalisée
config = LouchebemConfig(
    # Préservation des mots
    preserve_stopwords=True,              # Garder "le", "la", "de", "un", etc. (mots-outils)
    preserve_ultra_common_verbs=True,     # Garder "être", "avoir", "faire", "aller" (lisibilité)
    preserve_interjections=True,          # Garder "oh", "ah", "hein", "ben" (expressions orales)
    preserve_numbers=True,                # Garder les nombres et dates (123, XIV, 31/12/2023)
    preserve_proper_nouns=True,           # Garder les noms propres détectés (Paris, Marie)
    preserve_acronyms=True,               # Garder les acronymes (SNCF, UNESCO)
    preserve_already_louchebem=True,      # Ne pas retransformer les mots déjà en louchébem
    
    # Fonctionnalités de transformation
    enable_apostrophe_merging=True,       # Fusionner "l'argot" en "largot" avant transformation
    enable_l_initial_transform=True,      # Transformer les mots commençant par "l" (sinon préservés)
    enable_silent_consonants=True,        # Retirer consonnes muettes (discret → discrè)
    enable_doubled_consonant_simplification=True,  # Simplifier "tt" → "t", "ll" → "l", etc.
    enable_infinitive_verbs=True,         # Transformer "-er" en "-é" pour les verbes infinitifs
    
    # Comportement général
    preserve_case=True,                   # Conserver majuscules/minuscules du texte original
    preserve_punctuation=True,            # Garder la ponctuation intacte
    random_seed=None,                     # Graine aléatoire pour suffixes (None = aléatoire, int = reproductible)
)

converter = LouchebemConverter(config=config)

📚 Sources et remerciements

Ce projet s'appuie sur des sources historiques et linguistiques :

  • Wikipédia - Largonji : Article détaillé sur l'histoire et les procédés du largonji
  • louchebem.fr : Site de référence pour le louchébem. Nous nous en sommes inspirés, mais notre implémentation diffère sur plusieurs aspects.
  • Sylvain Macouin : « À propos du Ladukteurtrès Largonjem » — Analyse des difficultés de transformation automatique
  • Jacques Haddad : Documentation sur le louchébem historique

📄 Licence

WTFPL - voir le fichier LICENSE pour plus de détails.


🤝 Contribuer

Les contributions sont les bienvenues ! N'hésitez pas à :

  • 🐛 Signaler des bugs
  • 💡 Proposer de nouvelles fonctionnalités
  • 📝 Améliorer la documentation
  • ➕ Ajouter des mots au dictionnaire historique

Fait avec ❤️ pour préserver le largonji des louchébems

« Dans le cochon, tout est bon ! »

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

largonji-0.1.1.tar.gz (35.1 kB view details)

Uploaded Source

Built Distribution

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

largonji-0.1.1-py3-none-any.whl (25.7 kB view details)

Uploaded Python 3

File details

Details for the file largonji-0.1.1.tar.gz.

File metadata

  • Download URL: largonji-0.1.1.tar.gz
  • Upload date:
  • Size: 35.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.3

File hashes

Hashes for largonji-0.1.1.tar.gz
Algorithm Hash digest
SHA256 675604bf6767ff8ee17c2cd1778dab72a72b4a117a4613439fd2aba3e0fa7750
MD5 224086572d37f76078a32d9dd76368ae
BLAKE2b-256 3e2edf1b1ade3f6f387978e2d82df494df2f538d35503e3817649a2f7ba8f1e5

See more details on using hashes here.

File details

Details for the file largonji-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: largonji-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 25.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.3

File hashes

Hashes for largonji-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 731373d274f7c629096c6ad4ab22ba04d7c8fc0276a30219140cd6e3b64077e9
MD5 461a74f87f8e094184b467d3888b034f
BLAKE2b-256 488bfb4545401ff5daeaad6eb1482e8ef33a7d374a020d798843c27b13d110aa

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