tous les articles
1 min de lecture

Semaine des langues — quand Python lit nos textes

[object Object]

À l'occasion de la Semaine des langues, nous avons exploré comment les ordinateurs « lisent » le langage humain. Voici le déroulé de la séance, pour celles et ceux qui veulent rejouer les expériences à la maison.

Modules Python utilisés

  • spacy — traitement du langage naturel (tokenisation, lemmatisation).
  • deep-translator — traduction via plusieurs services en ligne.
  • wordcloud — génération de nuages de mots.
  • matplotlib — affichage du nuage.

Comparer des chaînes : un mot de passe trop simple

L'opération la plus élémentaire sur des chaînes consiste à les comparer.

mot_passe = "chateau"
reponse = input("Quel est le mot de passe ? ")
if reponse == mot_passe:
    print("Vous pouvez accéder aux documents secrets.")
else:
    print("Mot de passe incorrect.")
Quelles sont les limites de cette méthode ? Essayez "Chateau", " chateau", "chateau ". Discutez : faut-il être tolérant ? À quel prix ?

Pour aller plus loin, le projet Gandalf propose un chatbot qu'il faut convaincre de révéler un mot de passe — une excellente introduction aux failles des modèles de langage.

Le site The Password Game ludifie le choix d'un mot de passe en empilant des règles absurdes. Sous le capot, ces règles s'appuient sur des expressions régulières (regex101.com permet de les tester).

Traduire un texte en quelques lignes

from deep_translator import GoogleTranslator

texte = "La Tour Eiffel, située sur le Champ de Mars à Paris, est l'une des structures les plus célèbres du monde."

traduction = GoogleTranslator(source='auto', target='en').translate(texte)
print(traduction)

Découper un texte : la tokenisation

Avant tout traitement, on découpe le texte en unités appelées tokens. Un token est généralement un mot, parfois un signe de ponctuation, plus rarement une expression complète.

import spacy

nlp = spacy.load("fr_core_news_sm")
doc = nlp("Apple a annoncé le nouvel iPhone à San Francisco.")
tokens = [token.text for token in doc]
print(tokens)

Réduire un mot à sa forme canonique : la lemmatisation

En français, un même mot prend de nombreuses formes : mange, mangeait, mangeront… Le lemme est la forme « de référence » (ici : manger). Les moteurs de recherche s'appuient sur les lemmes pour retrouver tous les documents pertinents quelle que soit la flexion.

import spacy

nlp = spacy.load("fr_core_news_sm")
doc = nlp("Les enfants jouaient à la balle dans le parc.")
lemmes = [token.lemma_ for token in doc]
print(lemmes)

Mini moteur de recherche par lemmes

import spacy

nlp = spacy.load("fr_core_news_sm")

documents = [
    "La chatte mange des croquettes.",
    "Elle aime marcher dans le parc.",
    "Les enfants jouaient à la balle.",
    "J'aime lire des livres sur la nature."
]

def lemmatiser(texte: str) -> str:
    return ' '.join(token.lemma_ for token in nlp(texte))

lemm_docs = [lemmatiser(d) for d in documents]
requete = lemmatiser(input("Entrez votre terme de recherche : "))

for original, lemm in zip(documents, lemm_docs):
    if requete in lemm:
        print(original)

Nuage de mots à partir des lemmes

import spacy
from wordcloud import WordCloud
import matplotlib.pyplot as plt

nlp = spacy.load("fr_core_news_sm")
texte = "..."  # remplacez par un texte conséquent
doc = nlp(texte)

# On retire les mots vides (le, la, et, etc.)
lemmes = [token.lemma_ for token in doc if not token.is_stop and token.is_alpha]

nuage = WordCloud(width=800, height=400, background_color='white').generate(' '.join(lemmes))

plt.figure(figsize=(10, 5))
plt.imshow(nuage, interpolation='bilinear')
plt.axis('off')
plt.show()

Pour aller plus loin

Ces techniques de NLP (Natural Language Processing) sous-tendent une grande partie des outils que vous utilisez au quotidien : moteurs de recherche, correcteurs, assistants vocaux, traducteurs automatiques. Et elles forment l'ossature classique sur laquelle les grands modèles de langage (LLM) sont venus se greffer plus récemment.