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

Découper et nettoyer un texte avant de l’indexer

Après cette leçon: Je peux transformer un texte brut en jetons propres avec une fonction de nettoyage.

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

« 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

MotCe que ça veut direExemple
Tokenisationle découpage d’un texte en jetons
Normalisationla mise de tous les jetons sous une même forme
Mot videun mot très courant qui ne distingue aucun documentle
Racinisationle retrait de la fin d’un mot pour garder sa racine
Racinela partie du mot qui reste après ce retraitlivre

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

ÉtapeRésultat
Texte brutLe Menu du jour, c’est : poulet !
En minusculesle menu du jour, c’est : poulet !
Ponctuation remplacée par des espacesle menu du jour c est poulet
Découpé en jetonsle, menu, du, jour, c, est, poulet

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

Minuscules, ponctuation et découpage

Commande
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

MotPlus de 3 lettres, finit par s ou x ?Racine
livresOuilivre
menusOuimenu
busNon, 3 lettresbus
midiNonmidi
coursOuicour

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

Retirer deux mots vides

Commande
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

Code: python
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.

À 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.