Skip to article frontmatterSkip to article content

La fréquence d’apparition des mots dans un texte français

Le nombre d’apparitions d’un terme dans un document est souvent la première mesure statistique que l’on calcule. Elle permet de déterminer rapidement la probabilité d’apparition d’un mot, autrement dit sa fréquence relative, et de concevoir une matrice d’occurrences, voire de cooccurrences.

Un pré-traitement des données

La question de compter des occurrences de mots n’est pas si anodine qu’elle peut paraître. La qualité du résultat dépend grandement de la définition de l’objectif que l’on se fixe.

Prenons l’exemple du poème Le dormeur du val de Rimbaud, pour lequel on souhaite obtenir une liste de tuples de mots triés d’abord par leur fréquence d’apparition, puis par ordre alphabétique:

[('il', 6), ('dans', 5), ('la', 5), ('un', 5)…]

Le code ci-dessous effectue les actions suivantes:

import nltk
from nltk.tokenize import RegexpTokenizer

# Open the file
with open("./data/le_dormeur_du_val.txt") as f:
  text = f.read()

# Split the text into words
tokenizer = RegexpTokenizer(r"\w+")
words = tokenizer.tokenize(text)

# Words into lower case
words = list(
  map(
    lambda w:w.lower(),
    words
  )
)

Obtenir un dictionnaire de mots

L’objet words contient désormais une liste de mots à partir de laquelle nous allons obtenir un dictionnaire avec, comme clé, le mot et, comme valeur, le nombre de fois où il apparaît dans la liste:

from collections import Counter

# Get a dictionary of words
occurrences = Counter(words)

Trier les données

À cette étape, la variable occurrences représente un dictionnaire de fréquences décroissantes. Nous souhaitons en plus, à fréquence égale, sortir un tri par ordre alphabétique.

# Firstly, sort by word
occurrences = sorted(
  occurrences.items(),
  key=lambda x:x[0]
)

# Then, by decreasing frequency
occurrences = sorted(
  occurrences,
  key=lambda x:x[1],
  reverse=True
)
print(occurrences)
[('il', 6), ('dans', 5), ('la', 5), ('un', 5), ('le', 4), ('de', 3), ('dort', 3), ('est', 3), ('les', 3), ('où', 3), ('a', 2), ('c', 2), ('nue', 2), ('sa', 2), ('soleil', 2), ('accrochant', 1), ('argent', 1), ('au', 1), ('aux', 1), ('baignant', 1), ('berce', 1), ('bleu', 1), ('bouche', 1), ('chante', 1), ('chaudement', 1), ('comme', 1), ('cresson', 1), ('côté', 1), ('d', 1), ('des', 1), ('deux', 1), ('droit', 1), ('enfant', 1), ('et', 1), ('fait', 1), ('fière', 1), ('follement', 1), ('font', 1), ('frais', 1), ('frissonner', 1), ('froid', 1), ('glaïeuls', 1), ('haillons', 1), ('herbe', 1), ('herbes', 1), ('jeune', 1), ('l', 1), ('lit', 1), ('luit', 1), ('lumière', 1), ('main', 1), ('malade', 1), ('montagne', 1), ('mousse', 1), ('narine', 1), ('nature', 1), ('ne', 1), ('nuque', 1), ('ouverte', 1), ('parfums', 1), ('pas', 1), ('petit', 1), ('pieds', 1), ('pleut', 1), ('poitrine', 1), ('pâle', 1), ('qui', 1), ('rayons', 1), ('rivière', 1), ('rouges', 1), ('soldat', 1), ('somme', 1), ('son', 1), ('souriant', 1), ('sourirait', 1), ('sous', 1), ('sur', 1), ('tranquille', 1), ('trou', 1), ('trous', 1), ('tête', 1), ('une', 1), ('val', 1), ('verdure', 1), ('vert', 1), ('étendu', 1)]