« Midi, » et « midi » : deux mots différents
La tokenisation est l’étape qui découpe un texte brut en jetons propres : des mots en minuscules, sans ponctuation, sans mots inutiles. Un index n’est bon que si ses jetons le sont.
Pour un programme, « Midi, » avec une majuscule et une virgule diffère de « midi ». Sans nettoyage, une recherche « midi » rate la moitié des fiches qui parlent de midi.
À la fin de cette leçon
Remarque
Je peux transformer un texte brut en jetons propres avec une fonction de nettoyage.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Tokenisation | le découpage d’un texte en jetons | |
| Normalisation | la mise de tous les jetons sous une même forme | |
| Mot vide | un mot très courant qui ne distingue aucun document | le |
| Racinisation | le retrait de la fin d’un mot pour garder sa racine | |
| Racine | la partie du mot qui reste après ce retrait | livre |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Majuscules et ponctuation séparent des mots identiques
Un ordinateur compare les caractères un à un. « Menu », « menu » et « menu, » sont donc trois jetons différents, et l’index les range sous trois entrées.
Il faut passer tout en minuscules, puis remplacer chaque signe de ponctuation par une espace avant de découper. L’apostrophe se traite de même : « l’index » donne « l » et « index ».
Exemple travaillé : du texte brut aux jetons
| Étape | Résultat |
|---|---|
| Texte brut | Le Menu du jour, c’est : poulet ! |
| En minuscules | le menu du jour, c’est : poulet ! |
| Ponctuation remplacée par des espaces | le menu du jour c est poulet |
| Découpé en jetons | le, menu, du, jour, c, est, poulet |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Minuscules, ponctuation et découpage
docker exec jupyter python3 -c 'print("Bibliotheque, Ouverte !".lower().replace(",", " ").replace("!", " ").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.
Les mots vides sont retirés de l’index
Des mots comme « le », « du », « et » sont dans presque tous les documents. Ils alourdissent l’index et ne distinguent rien : leur fréquence inverse est proche de 0.
On les range dans une liste de mots vides, et on ne garde un jeton que s’il n’est pas dans la liste. Cette liste dépend de la langue et du projet.
La racinisation rapproche « livre » et « livres »
Pour une recherche « livre », la fiche qui parle de « livres » est utile. La racinisation retire la fin du mot pour garder sa racine.
Notre règle simple : si le mot a plus de 3 lettres et finit par s ou x, on retire cette dernière lettre. Ainsi « menus » devient « menu », et « bus » reste « bus ».
Exemple travaillé : la règle sur cinq mots
| Mot | Plus de 3 lettres, finit par s ou x ? | Racine |
|---|---|---|
| livres | Oui | livre |
| menus | Oui | menu |
| bus | Non, 3 lettres | bus |
| midi | Non | midi |
| cours | Oui | cour |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Retirer deux mots vides
docker exec jupyter python3 -c 'print([m for m in "le menu des livres".split() if m not in ["le", "des"]])'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.
Une erreur fréquente
Attention
Beaucoup pensent que la racinisation est toujours juste. Notre règle donne « cour » pour « cours », un mot qui n’existe pas, et mêle des mots différents. Une racine sert à rapprocher, pas à écrire : elle reste dans l’index, jamais devant le lecteur.
Nettoyer un texte pas à pas
texte = "Le Menu du jour, c’est : poulet, riz et salade !"
mots_vides = ["le", "du", "c", "est", "et"]
minuscules = texte.lower()
for signe in ".,;:!?’'":
minuscules = minuscules.replace(signe, " ")
jetons = []
for mot in minuscules.split():
if mot not in mots_vides:
jetons.append(mot)
print(jetons)
# Ajoutez "jour" à mots_vides, puis relancez. Que devient la liste ?
Pour aller plus loin
Dans un carnet de JupyterLab, collez un court paragraphe de votre choix et nettoyez-le avec votre fonction du devoir. Comptez les jetons avant et après.
Quels mots vides ajouteriez-vous ? Trouvez un mot que la règle de racinisation abîme.