Compteur de fréquence de mots, gratuit

Analysez un texte pour compter la fréquence des mots et identifier ceux qui apparaissent le plus souvent. Idéal pour l'analyse de texte, la recherche de contenu et la détection de motifs.

À propos de l'analyse de fréquence de mots

La fréquence des mots est le décompte de la fréquence d'apparition de chaque mot dans un texte, l'analyse statistique la plus simple possible sur un corpus d'écriture, et pourtant la source de tout un champ. L'étude empirique des fréquences de mots en anglais commence avec George Kingsley Zipf, un linguiste de Harvard dont le livre de 1935 The Psycho-Biology of Language et la suite de 1949 Human Behavior and the Principle of Least Effort ont documenté ce qu'on appelle aujourd'hui la loi de Zipf : la fréquence de tout mot est à peu près inversement proportionnelle à son rang dans la table de fréquence. Le mot le plus courant en anglais (« the ») représente environ 7 % de tous les tokens-mots dans un corpus anglais typique ; le deuxième plus courant (« of ») environ 3,5 % ; le troisième environ 2,8 %. La relation tient pour presque toutes les langues naturelles et pour presque tous les types de texte, livres, journaux, parole transcrite, commentaires de code, médias sociaux. Elle tient même pour l'inverse : la plupart des mots n'apparaissent qu'une ou deux fois dans un texte donné, peu importe sa taille. Zipf l'attribuait à un principe du moindre effort : les locuteurs minimisent le coût d'énonciation tandis que les auditeurs minimisent le coût de compréhension, et l'équilibre est une distribution en loi de puissance.

Le premier corpus informatique conçu spécifiquement pour l'analyse de fréquence fut le Brown Corpus, compilé par W. Nelson Francis et Henry Kučera à Brown University et publié en 1961. Il contient 1 014 312 tokens de mots issus de 500 échantillons de prose à travers 15 genres (reportage journalistique, fiction, écriture religieuse, articles scientifiques, savoir populaire, documents gouvernementaux, et plus), chaque échantillon long de 2 000 mots. Le Brown Corpus est le fondement de la linguistique anglaise empirique, toute étude moderne de fréquence de mots en anglais s'appuie dessus directement ou indirectement. Le pendant britannique, le LOB Corpus (Lancaster-Oslo/Bergen), a suivi en 1976 avec la même structure pour l'anglais britannique. Les corpus industriels d'aujourd'hui (les données n-gram de Google issues de plus de 8 millions de livres, l'iWeb Corpus à 14 milliards de mots, les corpus web-crawlés OSCAR à des centaines de milliards de mots) retracent tous leur méthodologie jusqu'au Brown.

Mots vides : le concept et les listes

Une analyse de fréquence sans filtrage des mots vides est dominée par les mots-outils, articles, prépositions, conjonctions, auxiliaires, qui apparaissent dans chaque phrase et portent peu de sens thématique. Le terme « stop words » a été inventé par Hans Peter Luhn dans son article de 1958 « The Automatic Creation of Literature Abstracts », écrit chez IBM Research sur l'IBM 704. Luhn les appelait des « noise words », mots si courants qu'ils masquaient les mots de contenu plus informatifs. Les listes modernes de mots vides restent assez petites. La liste anglaise de mots vides de la bibliothèque Python NLTK fait 179 mots ; celle de spaCy environ 326. La taille exacte dépend de la philosophie : la liste NLTK est conservatrice (uniquement les mots les plus universellement outils) ; celle de spaCy est plus agressive (incluant beaucoup de verbes et pronoms courants). Les autres langues ont besoin de leurs propres listes, et ces listes deviennent plus difficiles à composer. L'allemand a beaucoup de mots composés qui se décomposent en parties plus courtes communes. Le chinois, le japonais et le thaï n'ont aucun séparateur d'espaces, donc avant de pouvoir demander « quelle est la fréquence de ce mot » il faut faire une segmentation, décider où sont les frontières de mots, ce qui est un problème plus profond que la simple tokenisation par espaces de l'anglais. La liste de mots vides de cet outil couvre l'anglais ; pour le texte non-anglais, la sortie de fréquence brute insensible à la casse sera plus utile que la version filtrée.

Qu'est-ce qui compte comme un mot, le problème de la tokenisation

Compter des mots semble simple jusqu'à ce qu'on essaie de spécifier ce qu'est exactement un mot. « don't » est-il un mot ou deux (do + n't) ? « state-of-the-art » est-il un mot ou quatre ? L'URL example.com est-elle un mot ? Et U.S.A., trois mots, un mot, ou un mot qui devrait être normalisé en USA ? Les règles de tokenisation du Penn Treebank (développées à l'Université de Pennsylvanie pour le corpus Penn Treebank, à partir de 1989) sont devenues le standard de facto du NLP anglais et séparent les contractions en tokens distincts (don'tdo + n't). La norme Unicode UAX #29 (Unicode Text Segmentation) définit des frontières de mots sensibles à la langue qui fonctionnent à travers la plupart des scripts. La plateforme web moderne expose cela comme Intl.Segmenter, disponible en baseline dans Chrome, Firefox et Safari depuis 2024, donnez-lui une chaîne et une locale, obtenez un itérateur de frontières de mots qui respecte les conventions de la langue d'entrée. Cet outil utilise une approche regex ([\p{L}\p{N}][\p{L}\p{N}_'-]* avec le flag Unicode) qui gère bien la plupart des cas mais traite state-of-the-art comme quatre mots et peut peiner avec les apostrophes typographiques courbes (le caractère U+2019 que Word produit par défaut, l'apostrophe ASCII droite U+0027 fonctionne correctement).

Racinisation et lemmatisation

Un comptage naïf de fréquence traite run, runs, running et ran comme quatre mots différents. Pour certaines questions c'est la bonne réponse (vous voulez vraiment compter les formes de surface séparément) ; pour beaucoup d'autres, vous les voulez regroupés en un seul concept. La racinisation (stemming) coupe les suffixes par règles, le célèbre Porter stemmer de Martin Porter (1980) réduit les mots à leurs racines via un algorithme de suppression de suffixes multi-étapes : runningrun, catscat, generouslygenerous. Porter a ensuite raffiné le système en Snowball (2001), un petit langage pour écrire des stemmers à travers plusieurs langues. La racinisation est rapide et indépendante de la langue mais produit des non-mots (argues, argued, arguing deviennent tous argu). La lemmatisation est l'alternative plus sophistiquée : elle utilise un dictionnaire et une analyse grammaticale pour mapper chaque forme de surface à son lemme canonique, produisant de vrais mots (ranrun, pas ra). La lemmatisation est plus lente, nécessite un dictionnaire spécifique à la langue, et gère les cas irréguliers que la racinisation rate. NLTK et spaCy livrent tous deux des lemmatiseurs ; cet outil ne fait ni l'un ni l'autre, par design, l'analyse de fréquence sur les formes de surface est plus utile pour certaines applications (analyse de style, diversité du vocabulaire) que ne le serait la version lemmatisée.

TF-IDF : pourquoi la fréquence d'un mot dans un document seul ne suffit pas

Une analyse de fréquence sur un document unique peut vous dire quels mots apparaissent le plus souvent dans ce texte particulier, mais elle ne peut pas vous dire quels mots sont distinctifs pour ce texte. The apparaît le plus souvent dans tout document anglais, donc sa fréquence élevée dans votre document ne vous dit rien. TF-IDF (Term Frequency-Inverse Document Frequency) est la solution classique : elle pondère la fréquence de chaque terme dans un document par l'inverse de la fréquence à laquelle le terme apparaît dans le corpus plus large. Les mots courants partout (the, of, and) obtiennent des poids faibles ; les mots courants dans votre document mais rares ailleurs obtiennent de gros poids. Le concept IDF a été introduit par Karen Spärck Jones dans son article de 1972 « A Statistical Interpretation of Term Specificity and Its Application in Retrieval » dans le Journal of Documentation, Jones est l'une des figures fondatrices de la linguistique informatique et de la recherche d'information, et sa contribution aux moteurs de recherche (tout algorithme de classement de recherche depuis PageRank doit quelque chose à TF-IDF) est largement sous-reconnue. Cet outil calcule la fréquence brute, pas TF-IDF, TF-IDF requiert un corpus de comparaison, et il n'y a pas de corpus unique correct pour une entrée utilisateur arbitraire.

N-grams et le Google Books Ngram Viewer

La fréquence d'un mot unique est le cas particulier de l'analyse 1-gram. Les bigrams (séquences de deux mots) et trigrams (séquences de trois mots) capturent les locutions multi-mots, « machine learning » est un bigram qui n'apparaîtrait jamais dans une analyse de fréquence de mots uniques mais est plus informatif que les comptes séparés de machine et learning. Le plus grand jeu de données n-gram disponible publiquement est le Google Books Ngram Viewer, lancé le 16 décembre 2010 et construit à partir de texte reconnu par OCR d'environ 8 millions de livres, environ 6 % de tous les livres jamais publiés. Le viewer vous permet de tracer la fréquence de tout 1-, 2-, 3-, 4- ou 5-gram à travers l'anglais (et plusieurs autres langues) de l'an 1500 à aujourd'hui. Il a été utilisé pour tout, du suivi de la montée et de la chute de l'argot à la datation de manuscrits non datés en passant par la documentation du biais de genre dans l'usage anglais historique. La génération de texte par chaîne de Markov, précurseur des modèles de langage modernes, était construite sur les statistiques n-gram, prédire le mot suivant à partir des N mots précédents est exactement ce qu'une table de fréquence n-gram vous dit. Cet outil compte des mots uniques ; l'analyse bigram et trigram est sur la liste des fonctionnalités futures.

Taille de vocabulaire et loi de Heaps

Un locuteur natif anglais adulte connaît à peu près 20 000 à 35 000 familles de mots (une « famille de mots » étant un mot de base plus ses flexions, run, runs, running, ran comme une seule famille). L'étude de Brysbaert et al. 2016 dans Frontiers in Psychology a placé la médiane pour les adultes américains diplômés universitaires autour de 42 000 mots de base. La loi de Heaps (Heaps 1978 ; l'observation sous-jacente remonte aux années 1950) décrit comment le vocabulaire croît avec la taille du corpus : V ∝ K · Nβ, où V est le compte de mots uniques (vocabulaire), N le compte total de tokens (taille du corpus), K une constante dans l'intervalle 10-100, et β entre 0,4 et 0,6 pour l'anglais. En clair : plus un texte est long, plus vous rencontrez de nouveaux mots, mais chaque mot successif a moins de chances d'être nouveau. Un essai de 1 000 mots introduit peut-être 400 mots uniques ; un essai de 10 000 mots en introduit autour de 1 300 ; un roman de 100 000 mots autour de 4 500. La relation est sub-linéaire mais non bornée, il n'y a pas de « plafond de vocabulaire » théorique pour le langage naturel. La règle empirique pour les rédacteurs de contenu : un billet de blog typique de 1 500 mots contient autour de 500-600 mots uniques, et les 20 plus fréquents (majoritairement des mots vides) couvrent à peu près la moitié des occurrences totales.

Quand l'analyse de fréquence de mots est réellement utile

Comment cet outil fonctionne dans votre navigateur

L'implémentation est simple. Le texte passe par une regex Unicode-aware ([\p{L}\p{N}][\p{L}\p{N}_'-]*/gu) qui fait correspondre des séquences de lettres et chiffres comme des mots ; les correspondances sont normalisées en minuscules si l'option insensible à la casse est activée ; chaque mot est incrémenté dans une Map JavaScript ; les entrées sont ensuite triées par compte décroissant et rendues sous forme de graphique et de table. Le temps total sur un document de 100 000 mots est sous la seconde sur un ordinateur portable typique. Map est la bonne structure de données ici, elle préserve l'ordre d'insertion, a un lookup et une mise à jour O(1), et se sérialise proprement en tableau 2D pour l'export. Une implémentation plus sophistiquée utiliserait Intl.Segmenter (l'API de segmentation Unicode-aware, baseline depuis avril 2024) pour les langues avec des frontières de mots non triviales, particulièrement CJK ; l'approche regex fonctionne bien pour les langues européennes et s'effondre pour le chinois, le japonais et le thaï qui n'ont pas de séparateurs de mots par espaces.

Confidentialité : pourquoi le tout-navigateur compte ici

Les brouillons d'écriture non publiée, billets de blog, mémos internes, livrables clients, chapitres de manuscrits, articles académiques en cours, sont exactement le type de texte où téléverser à un service tiers est indésirable. Les outils de fréquence de mots côté serveur exigent d'envoyer le texte entier à un endpoint distant, ce qui signifie qu'il s'assoit dans les journaux du serveur, possiblement dans un cache CDN, possiblement dans un pipeline d'analytique, possiblement dans une sauvegarde. Pour le texte publié, le problème est sans objet. Pour le travail brouillon, la copie client sous NDA, ou tout manuscrit que vous ne voulez encore voir par personne hors de votre équipe, l'architecture compte. Cet outil exécute tout le pipeline dans votre navigateur via JavaScript. Le texte ne traverse jamais le réseau, vérifiez dans l'onglet Network de DevTools en cliquant Analyze, ou mettez la page hors ligne (mode avion) après chargement et confirmez que l'analyse fonctionne encore. Sûr pour brouillons confidentiels, livrables clients et tout texte que vous ne voudriez pas voir copié sur le disque dur d'un inconnu.

Foire aux questions

Que sont les mots vides ?

Les mots vides sont des mots courants comme « le », « la », « est », « et », « ou » qui apparaissent fréquemment dans la plupart des textes mais portent peu de sens. Les filtrer permet de concentrer l'analyse sur les mots plus porteurs de sens.

Comment le pourcentage est-il calculé ?

Le pourcentage est calculé ainsi : (occurrences du mot ÷ total des mots) × 100. Par exemple, si un mot apparaît 5 fois dans un texte de 100 mots au total, sa fréquence est de 5 %.

Ce compteur gère-t-il les locutions (n-grams) ?

Mots uniques seulement, actuellement. Les bigrams (séquences de deux mots comme « machine learning »), trigrams et n-grams plus longs sont sur la liste des fonctionnalités futures. Le Google Books Ngram Viewer (lancé le 16 décembre 2010) est la référence publique pour l'analyse n-gram à l'échelle ; pour le texte personnel, NLTK et spaCy livrent l'extraction n-gram en quelques lignes de Python.

Puis-je analyser de très longs textes ?

Oui, cet outil s'exécute entièrement dans votre navigateur et peut traiter des textes de plusieurs Mo. Les textes très volumineux peuvent toutefois prendre quelques secondes à traiter. Vos données ne quittent jamais votre appareil.

Fonctionne-t-il pour le texte non-anglais ?

Partiellement. La regex Unicode-aware identifie correctement les caractères de mots dans toute langue à script latin, cyrillique, grec, hébreu ou arabe. Pour le chinois, le japonais et le thaï, qui n'ont pas de séparateurs de mots par espaces, la fréquence brute par caractère fonctionnera mais n'est pas vraiment de la « fréquence de mots » au sens linguistique, vous avez besoin d'une segmentation de mots d'abord (jieba pour le chinois, MeCab pour le japonais, Intl.Segmenter d'ICU pour le support côté navigateur). Le filtre de mots vides est anglais uniquement.

Mes textes sont-ils téléversés ?

Non. L'analyse tourne entièrement dans votre navigateur via JavaScript. Le texte collé ne traverse jamais le réseau, vérifiez dans l'onglet Network de DevTools en cliquant Analyze, ou mettez la page hors ligne (mode avion) après chargement et l'outil fonctionnera encore. Sûr pour brouillons confidentiels, livrables clients, chapitres de manuscrits sous NDA, mémos internes ou tout ce que vous ne voudriez pas voir copié sur le disque dur d'un inconnu.

Outils associés

Comptage de mots et de caractères en ligne, gratuit Comptage de mots et de caractères en ligne, gratuit Comptage de caractères en ligne, gratuit