Aller au contenu principal
Guides & Stratégie• 7 min de lecture

Gestion des abréviations et fautes d'orthographe dans les chatbots WhatsApp

Les messages WhatsApp sont truffés d'abréviations et fautes d'orthographe. Comment configurer votre chatbot pour comprendre 'bjr', 'pk', 'stp' et les erreurs courantes.

Les messages WhatsApp ne ressemblent pas aux emails professionnels. Vos clients écrivent vite, depuis leur téléphone, souvent en marchant ou entre deux activités. Le résultat : des abréviations ("bjr", "stp", "pk"), des fautes d'orthographe fréquentes ("j'ai commender", "livraion"), et parfois des messages qui ne contiennent que des chiffres ou des emojis. Un chatbot qui ne comprend que du français parfait rate 40% de ses conversations.

Ce guide vous donne les outils et techniques pour rendre votre chatbot robuste face à l'imprécision linguistique naturelle des messages WhatsApp africains.

La taxonomie des erreurs WhatsApp africaines

Catégorie 1 : Abréviations SMS héritage (universelles)

Ces abréviations viennent de l'ère des SMS et sont universelles en France et en Afrique francophone :

Abréviation Signification Fréquence
bjr / bj bonjour Très haute
bsr bonsoir Haute
stp / svp s'il vous plaît Très haute
pk / pq pourquoi Haute
bn bien / bonne Moyenne
pr pour Haute
ds dans Moyenne
qd quand Haute
koi / quoi quoi Haute
cb / cmb combien Haute
ms mais Haute
tlm tout le monde Moyenne
tt tout Haute
bcp beaucoup Haute
tjrs toujours Moyenne
nrv énervé Moyenne
dsl désolé Haute
pbl / pb problème Très haute
ct / c'est c'est Haute
ya / y'a il y a Très haute

Catégorie 2 : Abréviations africaines spécifiques

Ces formes sont plus répandues en Afrique subsaharienne francophone :

Abréviation Signification Marché
"wesh" salut/oh CI, Maghreb
"fé" fait CI
"defo" définitivement CI
"po" pas / peu CI, SN
"ya" il y a / j'ai CI
"c vs" c'est vous Général
"kk chose" quelque chose Général
"mm" même Général
"ac" avec Général
"ler" / "1er" premier Général

Catégorie 3 : Fautes d'orthographe fréquentes

Les fautes les plus communes dans les messages WhatsApp africains :

# Fautes d'orthographe fréquentes → forme correcte
SPELLING_CORRECTIONS = {
    # Verbes mal orthographiés
    "commender": "commander",
    "commandé": "commandé",
    "livraion": "livraison",
    "livaison": "livraison",
    "recevoir": "recevoir",
    "rembourser": "rembourser",
    "anulé": "annulé",
    "anullé": "annulé",
    "payement": "paiement",
    
    # Noms fréquents mal orthographiés
    "comande": "commande",
    "coli": "colis",
    "produis": "produit",
    "adrese": "adresse",
    "numero": "numéro",
    "portefeuil": "portefeuille",
    "probleme": "problème",
    "reponse": "réponse",
    
    # Accents manquants (très fréquent sur mobile)
    "deja": "déjà",
    "meme": "même",
    "ete": "été",  # Contexte-dépendant
    "a cause": "à cause",
    "pret": "prêt",
    
    # Confusion consonantique
    "en tout cas": "en tout cas",
    "sela": "cela",
    "sa": "ça",  # Attention, "sa" est aussi un article wolof
}

Catégorie 4 : Messages ultra-courts ou cryptiques

Certains messages sont extrêmement courts et difficiles à interpréter sans contexte :

  • "?" → Demande d'information générale ou réponse en attente
  • "non" → Refus d'une option proposée
  • "ok" → Accord/confirmation
  • "1" → Sélection de la première option (habitude des bots IVR)
  • Juste un numéro → Probablement un numéro de commande

Implémentation : couche de robustesse orthographique

Solution 1 : Dictionnaire de corrections statique

import re
from typing import Tuple

class TextRobustnessLayer:
    """Couche de robustesse pour les messages WhatsApp africains"""
    
    def __init__(self):
        # Charger dictionnaires
        self.abbreviations = ABBREVIATIONS_DICT  # Dictionnaire complet
        self.spelling_corrections = SPELLING_CORRECTIONS
        self.african_normalizations = AFRICAN_DICT  # Nouchi, wolof, darija
    
    def preprocess(self, text: str, market: str = None) -> Tuple[str, dict]:
        """
        Pipeline de preprocessing complet.
        Retourne le texte normalisé et les métadonnées de transformation.
        """
        original = text
        transforms = []
        
        # Étape 1 : Normalisation basique
        text = text.strip()
        text = re.sub(r'\s+', ' ', text)  # Espaces multiples → simple
        
        # Étape 2 : Expansion des abréviations
        text_lower = text.lower()
        for abbr, expansion in self.abbreviations.items():
            # Chercher le mot entier (éviter "pr" dans "prêt")
            pattern = r'\b' + re.escape(abbr) + r'\b'
            if re.search(pattern, text_lower):
                text = re.sub(pattern, expansion, text, flags=re.IGNORECASE)
                transforms.append({'type': 'abbreviation', 'from': abbr, 'to': expansion})
        
        # Étape 3 : Correction orthographique
        for wrong, correct in self.spelling_corrections.items():
            if wrong in text.lower():
                text = re.sub(re.escape(wrong), correct, text, flags=re.IGNORECASE)
                transforms.append({'type': 'spelling', 'from': wrong, 'to': correct})
        
        # Étape 4 : Normalisation africaine si marché spécifié
        if market:
            text = self._apply_african_normalization(text, market)
        
        return text, {
            'original': original,
            'normalized': text,
            'transforms': transforms,
            'was_modified': text.lower() != original.lower()
        }
    
    def _apply_african_normalization(self, text: str, market: str) -> str:
        market_dict = self.african_normalizations.get(market, {})
        for local_term, french_term in market_dict.items():
            text = text.replace(local_term, french_term)
        return text

Solution 2 : Correction orthographique avec spaCy + pyenchant

Pour une correction plus robuste et contextuelle :

# Installation : pip install spacy pyenchant
# python -m spacy download fr_core_news_sm

import spacy
import enchant

nlp = spacy.load('fr_core_news_sm')
spellchecker = enchant.Dict('fr_FR')

def spacy_spell_correct(text: str) -> str:
    """Correction orthographique contextuelle avec spaCy"""
    doc = nlp(text)
    corrected_tokens = []
    
    for token in doc:
        if token.is_alpha and not spellchecker.check(token.text):
            suggestions = spellchecker.suggest(token.text)
            if suggestions:
                # Prendre la première suggestion seulement si très proche
                best_suggestion = suggestions[0]
                # Vérifier que la correction ne change pas le sens radicalement
                if levenshtein_distance(token.text.lower(), best_suggestion.lower()) <= 2:
                    corrected_tokens.append(best_suggestion)
                    continue
        corrected_tokens.append(token.text)
    
    return ' '.join(corrected_tokens)

Gestion des messages numériques et emoji-only

// Handler pour messages spéciaux
function handleSpecialMessages(message, conversationState) {
  
  // Message contenant uniquement un numéro
  if (/^\d+$/.test(message.trim())) {
    if (conversationState.expecting === 'menu_choice') {
      return { type: 'menu_selection', value: parseInt(message) };
    }
    if (conversationState.expecting === 'order_number' || message.length >= 8) {
      return { type: 'order_number', value: message };
    }
    return { type: 'unknown_number', value: message };
  }
  
  // Message emoji uniquement
  const emojiRegex = /^[\u{1F000}-\u{1FFFF}\u{2600}-\u{27BF}\s]+$/u;
  if (emojiRegex.test(message.trim())) {
    // Mapper les emojis fréquents à des intentions
    const emojiIntents = {
      '👍': 'confirmation',
      '👎': 'refus',
      '❓': 'demande_information',
      '🛍️': 'achat',
      '📦': 'suivi_commande',
      '💸': 'probleme_paiement',
      '😡': 'insatisfaction',
      '😊': 'satisfaction'
    };
    
    for (const [emoji, intent] of Object.entries(emojiIntents)) {
      if (message.includes(emoji)) {
        return { type: 'emoji_intent', intent, original: message };
      }
    }
    return { type: 'emoji_unknown', original: message };
  }
  
  return null; // Message texte normal, traiter classiquement
}

Pour approfondir, consultez notre article sur le NLP en français africain et notre guide sur le chatbot WhatsApp guide complet.

FAQ

Q: Faut-il corriger les fautes d'orthographe avant de les envoyer à un LLM comme GPT-4 ?

A: GPT-4 et Claude sont déjà très robustes face aux fautes d'orthographe et aux abréviations — ils comprennent généralement l'intention même avec des messages très imparfaits. La normalisation orthographique est plus utile pour les modèles NLP classiques (détection d'intention par mots-clés ou embeddings) qui sont moins tolérants aux variantes.

Q: Combien d'abréviations faut-il couvrir pour avoir un impact significatif ?

A: Les 50 abréviations les plus fréquentes (liste ci-dessus) couvrent 80-85% des cas dans la plupart des marchés africains francophones. Un dictionnaire de 200 abréviations couvre 95%+ des cas. Au-delà, le rendement marginal décroît. Commencez par les 50 essentielles, mesurez l'impact, et élargissez si nécessaire.

Q: La correction orthographique automatique peut-elle créer des faux positifs (corriger un mot correct) ?

A: Oui, c'est le risque principal. "Sa" en wolof-français peut signifier "votre/ton" et non pas "ça" en français. "Dem" peut être un nom propre ou le verbe wolof "partir". Configurez des listes de mots à ne pas corriger (exemptions) pour les termes dialectaux courants, et limitez la correction aux fautes clairement lexicales.

Q: Comment gérer les messages en majuscules (signifiant souvent de la frustration) ?

A: Deux traitements en parallèle : (1) normalisation casse pour l'analyse du contenu textuel (tout passer en minuscules), (2) calcul du ratio majuscules/minuscules comme signal de sentiment avant la normalisation. Un message comme "JAMAIS REÇU MA COMMANDE ET C'EST INACCEPTABLE" doit déclencher une alerte sentiment avant toute normalisation.


La robustesse linguistique n'est pas un luxe — c'est une nécessité pour tout chatbot WhatsApp déployé en Afrique. Quelques heures de configuration de ces couches de normalisation améliorent drastiquement les taux de compréhension.

Créez votre chatbot robuste avec Whakup et configurez vos flows pour comprendre tous vos clients, quelle que soit leur orthographe.

#whatsapp-business-api-guide#automatisation-whatsapp-flows#chatbot-whatsapp-guide
Arthur Lyonnet
Arthur LyonnetCo-fondateur & CEO

Co-fondateur de Whakup, Arthur accompagne les entreprises africaines dans leur transformation digitale via WhatsApp depuis 2022. Passionné par le growth marketing et l'entrepreneuriat en Afrique francophone.

🚀

Prêt à passer à l'action ?

Essayez Whakup gratuitement pendant 15 jours. Aucune carte bancaire requise.

Démarrer l'essai gratuit