Semaine des langues

Les modules Python utilisés aujourd'hui sont les suivants :

  • spacy
  • deep-translator
  • wordcloud
  • matplotlib

Manipulation de chaînes de caractères

En Python, et en programmation de façon générale, il est facile de comparer deux chaînes de caractères, et de varier les conséquences de ce test en fonction des besoins.

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.")

On compare ici l'information fournie par l'utilisateur à celle que nous avons considérée comme étant le mot de passe.

Quelles sont les limites de cette méthode ? Essayer quelques variantes du mot de passe.

L'intelligence artificielle et les chatbots

Un petit projet a vu le jour lors d'un hackathon : Gandalf. Ce chatbot a été programmé pour ne pas donner le mot de passe qui amène au niveau suivant.

Essayons quelques pistes, puis nous discuterons de la façon dont les différents niveaux sont protégés.

La détection dans des chaînes de caractères en temps réel

Nous allons jouer quelques minutes au site The Password Game.
Ce site met en oeuvre la ludification de la tâche complexe qu'est le choix d'un mot de passe sécurisé.

Ce jeu met en oeuvre les expression régulières. Nous allons discuter de ces expressions régulières, et mettre en oeuvre quelques exemples simples.

Traduction automatique

Le langage Python est un langage largement utilisé à travers le monde, dans de nombreux contextes différents, dont l'analyse de données, l'apprentissage de la programmation. C'est un langage facile à mettre en oeuvre.
Le fait qu'il soit largement utilisé en fait un excellent support d'apprentissage, grâce aux communautés de développeurs qui s'organisent au fil du temps.

Nous allons utiliser le langage Python pour créer un petit programme de traduction.

from deep_translator import GoogleTranslator

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

# Traduction
print("Traductions:", GoogleTranslator(source='auto', target='en'))

Découper un texte: tokens

Avant de travailler sur un texte, il est nécessaire de le découper en parties plus petites, appelées tokens. La tokenisation d'un texte aboutit généralement à son découpage en mots. Parfois, une expression, groupe de mots ou même une phrase peuvent correspondre à un token.
C'est toutefois plus rare.

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

Analyser un texte : lemmes

En français, et dans quasi toutes les langues, chaque mot peut prendre plusieurs formes : féminin, masculin, neutre, singulier, pluriel... On trouve également en latin ou en allemand des déclinaisons, qui ajoutent encore des formes différentes pour un même mot.

Dans le domaine du traitement du langage naturel, il peut être nécessaire pour améliorer l'efficacité des outils de passer par un processus appelé lemmatisation.
Grâce à un module appelé spacy, nous allons lemmatiser certains textes afin de comprendre le processus.

import spacy
nlp = spacy.load("fr_core_news_sm")
text = "Apple a annoncé le nouvel iPhone à San Francisco."
doc = nlp(text)

lemmas = [token.lemma_ for token in doc]
print(lemmas)

Intérêt de travailler avec des lemmes

Les moteurs de recherche travaillent avec les lemmes issus de nos requêtes, ce qui leur permet de pouvoir trouver un document qui contiendrait la variante d'un mot que nous avons indiqué.

import spacy

# Chargement du modèle spaCy
nlp = spacy.load('fr_core_news_sm')

# Ensemble de données à rechercher
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."
]

# Fonction pour lemmatiser les documents
def lemmatize(text):
    doc = nlp(text)
    return ' '.join([token.lemma_ for token in doc])

# Lemmatisation des documents
lemm_documents = [lemmatize(doc) for doc in documents]

# Recherche
query = input("Entrez votre terme de recherche : ")
lemm_query = lemmatize(query)

# Afficher les documents qui contiennent le lemme de la requête
matches = [doc for doc in documents if lemm_query in doc]
print("Documents correspondants :")
for match in matches:
    print(match)

Nuage de mots

Grâce aux lemmes, on peut également réduire un texte à un ensemble de lemmes qui permettra d'identifier les mots les plus fréquents dans un texte.

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

# Chargement du modèle de langue
nlp = spacy.load('fr_core_news_sm')
text = "test"
doc = nlp(text)

# Extraction des lemmes en excluant les stop-words
lemmes = [token.lemma_ for token in doc if not token.is_stop]

# Génération du nuage de mots
wordcloud = WordCloud(width = 800, height = 400, background_color ='white').generate(' '.join(lemmes))

# Affichage du nuage de mots
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()