Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Compter les mots et les pondérer (TF-IDF)

Après cette leçon: Je peux compter les mots d’un texte et donner plus de poids aux mots rares.

Leçon de 55 min2 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Comment transformer un texte en nombres ?

Compter les mots d’un texte est la façon la plus simple de le transformer en nombres. On parle d’un sac de mots, en anglais « bag of words ». Cette méthode sert à comparer des textes, à les trier et à repérer ce dont ils parlent.

Mais compter ne suffit pas : le mot « le » arrive partout. Le TF-IDF donne plus de poids aux mots qui distinguent un texte des autres.

À la fin de cette leçon

Remarque

Je peux compter les mots d’un texte et donner plus de poids aux mots rares.

Mots clés

MotCe que ça veut direExemple
Sac de motsles comptes de chaque mot, sans l’ordre
Fréquence d’un motsa part parmi les mots du texte2 sur 6
Fréquence de documentle nombre de textes qui contiennent ce mot
Raretéle nombre de textes divisé par la fréquence de document
Poids TF-IDFla fréquence multipliée par la rareté

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un sac de mots oublie l’ordre des mots

Pour faire un sac de mots, on compte combien de fois chaque mot apparaît. Ces comptes sont des nombres : un programme peut les additionner et les comparer.

On perd l’ordre des mots. Deux phrases de sens opposé peuvent donc avoir exactement le même sac.

Exemple travaillé : deux phrases, un seul sac

Phraselechienmordfacteur
Le chien mord le facteur2111
Le facteur mord le chien2111

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Compter les mots avec un dictionnaire

Code: python
texte = "le chat voit le chien et le chien voit le chat"
comptes = {}
for mot in texte.split():
    if mot in comptes:
        comptes[mot] = comptes[mot] + 1
    else:
        comptes[mot] = 1
print(comptes)
# Quel mot arrive en tête ? Ajoutez une phrase au texte, puis relancez.

La fréquence dépend de la longueur du texte

Un texte de 100 mots contient plus de « le » qu’un texte de 10 mots. Pour comparer, on divise le compte par le nombre de mots du texte.

C’est la fréquence d’un mot, en anglais « term frequency » ou TF. Si « le » apparaît 2 fois dans un texte de 6 mots, sa fréquence est 2 sur 6.

Compter avec l’outil de la bibliothèque standard

Commande
docker exec jupyter python3 -c 'print(__import__("collections").Counter("le chat voit le chat noir".split()))'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un mot présent partout ne distingue rien

Prenons trois messages : « le café est ouvert le matin », « le café est fermé le soir » et « le stage est ouvert aux étudiants ». Le mot « le » figure dans les trois et ne distingue rien. Le mot « matin » figure dans un seul message.

La fréquence de document est le nombre de textes qui contiennent le mot. La rareté divise le nombre de textes par ce nombre. Les outils réels ajoutent souvent un logarithme. Ici, on garde la division.

Exemple travaillé : les poids du premier message

MotCompteFréquenceTextes qui l’ontRaretéPoids
le22 sur 63 sur 33 / 3 = 10,33
café11 sur 62 sur 33 / 2 = 1,50,25
est11 sur 63 sur 33 / 3 = 10,17
matin11 sur 61 sur 33 / 1 = 30,50

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

Beaucoup pensent que le mot le plus fréquent est le plus important. Ici, « le » arrive en tête des comptes, mais « matin » pèse davantage. Un mot fréquent partout ne distingue pas un texte : regardez son poids, pas son seul compte.

Calculer deux poids à la main

Commande
docker exec jupyter python3 -c 'print(round(1 / 6 * 3 / 1, 2), round(2 / 6 * 3 / 3, 2))'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin

Dans un carnet de JupyterLab, prenez dix messages de votre choix et calculez le mot clé de chacun avec vos fonctions du devoir.

Les mots clés décrivent-ils bien chaque message ? Retirez les mots vides et comparez les résultats.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.