Qu’est-ce que la loi de Zipf ?
La loi de Zipf, du nom du linguiste George Zipf, stipule que dans un texte donné, la fréquence des mots est inversement proportionnelle à leur rang dans la liste des mots classés par fréquence décroissante. Autrement dit : le mot au rang 1 est très fréquent, celui au rang 2 environ deux fois moins, celui au rang 3 environ trois fois moins, etc.
Si f(r) est la fréquence du mot de rang r, alors on observe souvent une relation du type :
f(r) ≈ 1 / rα
où α est un paramètre proche de 1 (souvent entre 0,9 et 1,1 selon le corpus, la langue, le domaine et le nettoyage).
Sur un graphique en échelle log-log (log du rang vs log de la fréquence), cette relation se traduit fréquemment par une droite décroissante. Ce n’est pas une “preuve mathématique” que votre corpus est sain, mais c’est un signal structurel très courant dans les textes naturels.
Intuition : pourquoi ça arrive presque toujours
Dans une langue, certains mots servent principalement à relier, structurer ou fluidifier le discours (articles, prépositions, pronoms). Ils apparaissent énormément. Puis viennent des mots de contenu (noms, verbes, adjectifs) qui dépendent du sujet. Ils sont moins fréquents, mais restent présents. Et enfin, une “traîne longue” de mots rares : formes conjuguées, noms propres, termes techniques, fautes de frappe, variantes, néologismes.
La loi de Zipf décrit surtout un équilibre : une petite tête très fréquente + une longue traîne de raretés. En text mining, cette traîne longue est à la fois une richesse (spécificité) et un problème (sparsité, bruit, coût mémoire).
Exemple concret
Si le mot le plus fréquent apparaît 1000 fois dans un texte, la loi de Zipf prévoit que le 2ᵉ mot le plus fréquent apparaîtra environ 500 fois, le 3ᵉ environ 333 fois, et ainsi de suite (ordre de grandeur, pas une égalité parfaite). Les mots les plus fréquents dans une langue comme le français ou l’anglais sont souvent des mots-outils comme « le », « de », « et », « à », ou « the », « of », « to ».
| Rang (r) | Fréquence attendue si f(1)=1000 | Lecture text mining |
|---|---|---|
| 1 | ~1000 | Mots-outils très dominants |
| 2 | ~500 | Encore souvent stop words |
| 10 | ~100 | Frontière : mots fréquents mais parfois informatifs selon le domaine |
| 100 | ~10 | Vocabulaire de contenu, dépendant du sujet |
| 1000 | ~1 | Traîne longue : termes rares, bruit possible (typos, noms propres) |
Applications de la loi de Zipf dans le text mining
Zipf n’est pas un gadget “de cours”. C’est un outil pour décider où couper, quoi pondérer et comment interpréter un vocabulaire. Voici les usages les plus pratiques.
1) Filtrage des stop words
Les stop words sont des mots très fréquents qui apportent souvent peu d’information sémantique (ex : « le », « la », « les »). La loi de Zipf aide à repérer la tête de la distribution : les premiers rangs dominent fortement et peuvent écraser les signaux. Le filtrage “tout ou rien” dépend du cas : en classification thématique, on retire souvent ; en stylométrie ou analyse d’auteur, on conserve parfois une partie.
2) Extraction de mots-clés
Les mots-clés pertinents apparaissent en général moins que les stop words, mais plus que les mots ultra-rares. Zipf aide à choisir des seuils : ignorer les termes trop fréquents (génériques) et les termes trop rares (bruit ou hapax). Dans un corpus métier, des mots “fréquents” peuvent rester informatifs (ex : « client », « facture »), d’où l’importance du contexte.
3) Normalisation et réduction du vocabulaire
Les algorithmes de classification ou de clustering souffrent d’un vocabulaire immense et creux (matrices très sparses). En pratique, on réduit la dimension :
- en supprimant les termes trop rares (min_df) ;
- en supprimant les termes trop fréquents (max_df) ;
- en regroupant des variantes (lemmatisation, stemming) ;
- en choisissant un top-N de vocabulaire par fréquence ou par score.
4) Détection d’anomalies textuelles
Un corpus “normal” suit souvent une forme proche de Zipf. Des déviations fortes peuvent signaler : du spam, une génération automatique mal contrôlée, un dump de logs, une langue mélangée, un problème de tokenisation, ou un afflux de noms propres (ex : listes, catalogues).
5) Optimisation des ressources de calcul
Les mots rares contribuent parfois peu à une tâche donnée mais coûtent cher en mémoire/temps (surtout en bag-of-words). Réduire la traîne longue accélère les étapes de vectorisation, de training et d’inférence. Même avec des approches modernes (embeddings, transformers), la qualité du tokenizing et la propreté du corpus restent déterminantes.

Lien avec TF-IDF et réduction de dimension
Zipf explique pourquoi le TF (term frequency) seul est insuffisant : les mots très fréquents dominent mécaniquement. Le IDF (inverse document frequency) vient corriger en pénalisant les termes trop présents dans tous les documents. En pratique, TF-IDF sert à :
Renforcer les mots “spécifiques”
- Mettre en avant les termes qui discriminent un document d’un autre
- Réduire l’effet des mots très fréquents et peu informatifs
- Améliorer des modèles linéaires (SVM, régression logistique)
Stabiliser la représentation
- Rendre la matrice moins dominée par la tête de Zipf
- Faciliter le clustering / la recherche de similarité
- Créer une baseline robuste avant des méthodes plus lourdes
Sur un corpus réel, le gain de performance vient souvent moins d’un “nouvel algorithme” que d’un bon compromis min_df / max_df, d’un nettoyage cohérent (accents, apostrophes, tirets), et d’un choix de représentation adapté à la tâche (TF-IDF, embeddings, ou mix).
Détection d’anomalies et qualité de corpus
Tracer Zipf est aussi un outil de contrôle qualité. Avant même de modéliser, on peut repérer des signaux faibles :
- Tokenisation cassée : explosion de tokens courts, ponctuation mal gérée, caractères spéciaux.
- Langues mélangées : plusieurs têtes ou une pente atypique.
- Corpus “liste” : trop de noms propres ou références uniques, traîne longue surdimensionnée.
- Spam / contenu généré : répétitions artificielles, fréquence anormale de certains motifs.
Si la courbe log-log n’est pas “globalement” descendante, il ne faut pas conclure trop vite. Vérifier d’abord : nettoyage, segmentation, stop words, gestion des accents, des apostrophes (l’, d’), et des nombres.
Mise en œuvre de la loi de Zipf en text mining avec R ou Python
L’objectif est simple : compter les occurrences de mots, trier, puis tracer la fréquence en fonction du rang. Les exemples suivants restent volontairement basiques (ils servent de base de diagnostic).
Exemple en Python
import matplotlib.pyplot as plt
from collections import Counter
import re
# Charger un texte (exemple simplifié)
texte = """La loi de Zipf est une loi empirique largement observée dans les langues naturelles..."""
# Prétraitement minimal (à adapter selon vos besoins)
mots = re.findall(r"\b\w+\b", texte.lower())
# Compter la fréquence des mots
freq_mots = Counter(mots)
# Trier les mots par fréquence décroissante
mots_tries = freq_mots.most_common()
# Extraire rangs et fréquences
rangs = range(1, len(mots_tries) + 1)
frequences = [freq for mot, freq in mots_tries]
# Tracer Zipf (échelle log-log)
plt.figure(figsize=(10, 6))
plt.loglog(rangs, frequences, marker=".")
plt.title("Loi de Zipf pour le texte donné")
plt.xlabel("Rang des mots")
plt.ylabel("Fréquence des mots")
plt.grid(True, which="both")
plt.show()
Exemple en R
library(ggplot2)
# Charger un texte (exemple simplifié)
texte <- "La loi de Zipf est une loi empirique largement observée dans les langues naturelles..."
# Prétraitement minimal (à adapter selon vos besoins)
mots <- unlist(strsplit(tolower(texte), "\\W+"))
mots <- mots[nzchar(mots)] # retirer les chaînes vides
# Compter la fréquence des mots
freq_mots <- table(mots)
# Trier les mots par fréquence décroissante
freq_df <- data.frame(mot = names(freq_mots), freq = as.integer(freq_mots))
freq_df <- freq_df[order(-freq_df$freq), ]
freq_df$rang <- seq_along(freq_df$freq)
# Tracer Zipf (échelle log-log)
ggplot(freq_df, aes(x = rang, y = freq)) +
geom_point() +
scale_x_log10() +
scale_y_log10() +
labs(
title = "Loi de Zipf pour le texte donné",
x = "Rang des mots",
y = "Fréquence des mots"
) +
theme_minimal()

Interprétation : ce que la courbe dit, et ce qu’elle ne dit pas
Une visualisation en log-log montre souvent une droite descendante pour des textes naturels, indiquant une conformité approximative à Zipf. Si le tracé ne suit pas cette forme, cela peut signaler des anomalies, mais aussi simplement un corpus trop petit ou trop spécifique.
Limites de la loi de Zipf
- Corpus trop petit : la traîne longue devient instable, le “bruit” domine.
- Effet du domaine : un jargon métier peut déplacer la tête de distribution.
- Nettoyage : accents, apostrophes, lemmatisation, chiffres, tokens composés peuvent changer la pente.
- Langue et morphologie : certaines langues génèrent plus de variantes, donc plus de raretés.
Utiliser Zipf comme un outil de diagnostic (structure, qualité, bruit) et comme un guide de réglage (seuils min_df/max_df), plutôt que comme une règle absolue à “faire coller” au corpus.
Conclusion
La loi de Zipf est une découverte fondamentale en linguistique et en analyse de texte, permettant de modéliser efficacement les distributions de mots. En text mining, elle sert de base pratique pour la réduction de dimensionnalité, l’analyse de mots-clés, le filtrage des stop words, la détection d’anomalies et l’optimisation des ressources.
Une bonne compréhension de Zipf ne rend pas un modèle “meilleur” par magie, mais elle aide à faire des choix plus rationnels : quoi garder, quoi supprimer, et comment interpréter la traîne longue sans la confondre avec de l’information pure.
Repères et lectures
- George K. Zipf — travaux fondateurs sur les distributions de fréquence et la linguistique quantitative.
- Notions associées : lois de puissance, distributions à longue traîne, principe de Pareto (analogie, pas équivalence).
- Text mining pratique : TF, IDF, TF-IDF, vocabulaire (min_df / max_df), tokenisation, lemmatisation.