2  Pré-traitement du texte brut

Code

import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

## Update tools
# nltk.download('stopwords')
# nltk.download('punkt')

2.1 Objectifs du Module

Ce chapitre a pour but d’enseigner aux étudiants les techniques fondamentales de traitement préliminaire des textes. À la fin de ce module, les étudiants devraient être capables de :

  • Nettoyer et préparer des données textuelles pour l’analyse.
  • Appliquer des techniques de tokenisation et de normalisation.
  • Comprendre l’importance de la lemmatisation et de la suppression des mots non-pertinents.

2.2 Nettoyage des Données Textuelles

Le nettoyage des données est crucial pour la qualité le Text Mining. Cette section couvre les techniques pour éliminer les informations non pertinentes des textes.

2.2.1 Suppression des éléments non pertinents

  • Balises HTML : Extraction du texte contenu dans les documents HTML en éliminant les balises.

  • Caractères spéciaux et ponctuation : Suppression des caractères qui ne contribuent pas à la signification du texte, comme les symboles de ponctuation et les caractères numériques.

Example 2.1 (Suppression de balises html)  

Code
import re

def removeHtmlTags(text: str) -> str:
  """
  Remove html tags from html string.
  """
  # Création d'une expression régulière pour identifier les balises HTML
  clean = re.compile('<.*?>')
  
  # Remplacement des balises par une chaîne vide
  return re.sub(clean, '', text)

sampleText = "<div>Hello, this is an example <b>text</b> with <a href='example.com'>HTML</a> tags.</div>"
cleanText = removeHtmlTags(sampleText)
print(cleanText)
Hello, this is an example text with HTML tags.

Example 2.2 (Suppression de ponctuation)  

Code
import string

def removePunctuation(text):
    # Création d'une table de traduction
    translator = str.maketrans('', '', string.punctuation)
    
    # Suppression de la ponctuation
    return text.translate(translator)

sampleText = "Hello! This is an example? Yes, it includes: punctuation."
cleanText = removePunctuation(sampleText)
print(cleanText)
Hello This is an example Yes it includes punctuation

2.2.2 Normalisation du texte

  • Conversion en minuscules : Uniformisation de la casse pour éviter que les mêmes mots soient considérés différemment.

  • Correction orthographique : Correction des erreurs de frappe et des fautes d’orthographe pour améliorer la qualité des données.

Example 2.3 (Conversion en minuscules)  

Code
sampleText = "This is an Example of Text that NEEDS to be Normalized."
normalizedText = sampleText.lower()
print(normalizedText)
this is an example of text that needs to be normalized.

Example 2.4 (Correction orthograhique)  

Code
from spellchecker import SpellChecker

def correctSpelling(text: str, language:  str = "en"):
    spell = SpellChecker(language = language)
    
    # Découpe le texte en mots individuels
    words = text.split()
    
    # Trouve les mots mal orthographiés
    misspelled = spell.unknown(words)
    
    # Corrige les mots mal orthographiés
    corrected_text = ' '.join([spell.correction(word) if word in misspelled else word for word in words])
    return corrected_text

sample_text = "This is a sentense with some erors. Speeling is hrad."
corrected_text = correctSpelling(sample_text)
print("Original Text: ", sample_text)
Original Text:  This is a sentense with some erors. Speeling is hrad.
Code
print("Corrected Text: ", corrected_text)
Corrected Text:  This is a sentence with some errors Speeling is had

2.3 Tokenisation

2.3.1 Qu’est-ce que la Tokenisation?

La tokenisation est le processus par lequel les textes à analyser sont divisés en morceaux plus petits appelés tokens. En NLP, les tokens sont souvent des mots, mais ils peuvent aussi être des phrases ou d’autres unités selon le contexte. La tokenisation est une étape préliminaire dans de nombreuses tâches de NLP, car elle permet de structurer un texte brut pour des analyses ultérieures.

Note

Un token est une unité de traitement dans l’analyse d’un ensemble de documents.

2.3.2 Importance de la Tokenisation

  • Analyse de texte : La tokenisation permet d’analyser les mots et les phrases d’un texte pour la réalisation de tâches telles que la classification de texte, l’extraction d’entités nommées, et l’analyse de sentiment.

  • Indexation : Dans les moteurs de recherche, la tokenisation aide à indexer les mots pour une recherche rapide et efficace.

  • Compatibilité : Elle permet de préparer les données pour qu’elles soient compatibles avec divers outils de NLP qui exigent des entrées tokenisées.

2.3.3 Méthodes de Tokenisation

2.3.3.1 Tokenisation par Mots

La tokenisation par mots découpe un texte en mots individuels en utilisant des séparateurs tels que les espaces et la ponctuation.

Example 2.5 (Tokeniser par mots)  

Code
import nltk

nltk.download('punkt')
True

[nltk_data] Downloading package punkt to /home/toussile/nltk_data...
[nltk_data]   Package punkt is already up-to-date!
Code
from nltk.tokenize import word_tokenize

sample_text = "Hello, world! This is a test text."
tokens = word_tokenize(sample_text)
print(tokens)
['Hello', ',', 'world', '!', 'This', 'is', 'a', 'test', 'text', '.']

2.3.3.2 Tokenisation par Phrases

La tokenisation par phrases divise un texte en phrases complètes, ce qui est utile pour l’analyse qui dépend du contexte de la phrase entière.

Example 2.6 (Tokenisation par phrases)  

Code
from nltk.tokenize import sent_tokenize

sample_text = "Hello world. This is a test text. It contains multiple sentences."
sentences = sent_tokenize(sample_text)
print(sentences)
['Hello world.', 'This is a test text.', 'It contains multiple sentences.']

2.4 Filtrage des mots

2.4.1 Suppression des Mots Vides (Stop Words)

Les mots vides sont des mots qui apparaissent fréquemment dans la langue mais qui sont généralement retirés avant le traitement du texte car ils contiennent peu d’information significative qui serait utile pour l’analyse. Ces mots incluent des prépositions, des conjonctions, et certains adverbes et pronoms.

2.4.2 Exemple en Python avec NLTK

Example 2.7 (Suppression de mots vides)  

Code
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

# Update tools
nltk.download('stopwords')
True

[nltk_data] Downloading package stopwords to
[nltk_data]     /home/toussile/nltk_data...
[nltk_data]   Package stopwords is already up-to-date!
Code
nltk.download('punkt')
True

[nltk_data] Downloading package punkt to /home/toussile/nltk_data...
[nltk_data]   Package punkt is already up-to-date!
Code
# Texte exemple
text = "This is an example of a sample sentence showing off the stop words filtration."
# Tokenisation du texte
words = word_tokenize(text)
# Filtre pour enlever les mots vides
filtered_words = [word for word in words if not word in stopwords.words('english')]

print("Original Words:", words)
Original Words: ['This', 'is', 'an', 'example', 'of', 'a', 'sample', 'sentence', 'showing', 'off', 'the', 'stop', 'words', 'filtration', '.']
Code
print("Filtered Words:", filtered_words)
Filtered Words: ['This', 'example', 'sample', 'sentence', 'showing', 'stop', 'words', 'filtration', '.']

2.4.3 Lemmatisation

La lemmatisation est le processus de réduction des mots à leur forme lexicale de base. Contrairement à la troncation, la lemmatisation tient compte du contexte et convertit le mot en sa forme de base significative, qui a un sens dans un dictionnaire ou un lexique.

Exemple en Python avec SpaCy python Copy code

Example 2.8 (Lemmatisation)  

Code
import spacy

# Chargement du modèle en anglais
nlp = spacy.load('en_core_web_sm')

text = "The striped bats are hanging on their feet for best"
# Traitement du texte
doc = nlp(text)
lemmatized = " ".join([token.lemma_ for token in doc])
print("Original Text:", text)
print("Lemmatized Text:", lemmatized)

2.4.4 Impact et Importance du Filtrage des Mots

Le filtrage des mots joue un rôle crucial dans la préparation des données pour des tâches spécifiques de NLP, telles que :

  • Analyse de sentiment : Supprimer les mots vides peut aider à mettre l’accent sur les mots qui expriment des opinions.

  • Classification de texte : La lemmatisation aide à réduire la dimensionnalité du modèle, ce qui améliore les performances en généralisant mieux les mots similaires.

2.4.5 Extraction des \(n\)-grams

Les \(n\)-grams sont des séquences continues de n éléments (mots ou lettres) extraits d’un texte. L’extraction des n-grams est une méthode courante en text mining et NLP pour analyser la structure et la fréquence des phrases dans les données textuelles.

2.4.5.1 Qu’est-ce qu’un \(n\)-gram ?

Un \(n\)-gram est une combinaison de \(n\) mots consécutifs utilisés pour capturer le contexte dans le traitement du texte. Par exemple, dans la phrase “ChatGPT est un modèle de langage”, les bi-grams (n-grams où n=2) seraient: [“ChatGPT est”, “est un”, “un modèle”, “modèle de”, “de langage”].

2.4.5.2 Extraction des \(n\)-grams avec Python

Python, grâce à des bibliothèques comme NLTK, facilite l’extraction des n-grams. Voici un exemple simple utilisant NLTK pour extraire des bi-grams d’un texte.

Code
import nltk
from nltk import ngrams
from nltk.tokenize import word_tokenize

# Exemple de texte
text = "ChatGPT est un modèle de langage développé par OpenAI."

# Tokenisation du texte
tokens = word_tokenize(text, language='french')

# Génération des bi-grams
bigrams = list(ngrams(tokens, 2))

print(bigrams)
[('ChatGPT', 'est'), ('est', 'un'), ('un', 'modèle'), ('modèle', 'de'), ('de', 'langage'), ('langage', 'développé'), ('développé', 'par'), ('par', 'OpenAI'), ('OpenAI', '.')]

Ce script affichera les bi-grams du texte donné, permettant d’analyser les combinaisons de mots les plus fréquentes et leur contexte.

2.4.5.3 Applications des \(n\)-grams

Les \(n\)-grams sont utilisés dans de nombreuses applications de NLP, y compris:

  • Analyse de sentiment : Les n-grams peuvent aider à capturer des phrases qui expriment des sentiments, comme “pas bon” ou “très bon”.

  • Modélisation de langue : Utilisés pour développer des modèles prédictifs dans les systèmes de suggestion de texte ou de correction automatique.

  • Détection de plagiat : Les \(n\)-grams peuvent aider à identifier des séquences de mots uniques qui apparaissent dans différents textes, suggérant une copie potentielle.

2.5 Exercices

Exercise 2.1 (Analyse de Sentiments sur des Critiques de Films) Objectif

L’objectif de cet exercice est de permettre aux étudiants de mettre en pratique les techniques de nettoyage et de préparation des données textuelles apprises dans le cours, et d’appliquer une analyse de sentiment basique sur des critiques de films.

Description

Vous allez travailler avec un ensemble de données contenant des critiques de films. Chaque critique est étiquetée comme positive ou négative. Votre tâche est de nettoyer et préparer les données pour l’analyse, puis d’utiliser des techniques de filtrage des mots pour améliorer la qualité des données avant de procéder à une analyse de sentiment simple.

Étapes de l’Exercice

  1. Chargement des Données:
    • Téléchargez l’ensemble de données de critiques de films. Vous pouvez trouver les données pertinentes sur des sites comme Kaggle ou directement via l’IMDb dataset.
  2. Nettoyage des Données:
    • Supprimez toutes les balises HTML et les caractères non alphabétiques des critiques.
    • Convertissez tous les textes en minuscules pour standardiser les données.
  3. Tokenisation:
    • Tokenisez les critiques pour transformer les textes en listes de mots.
  4. Suppression des Mots Vides:
    • Utilisez une liste de mots vides pour filtrer les mots inutiles dans les critiques.
  5. Lemmatisation:
    • Appliquez la lemmatisation pour réduire les mots à leur forme de base. Utilisez SpaCy ou toute autre bibliothèque de traitement du langage naturel pour réaliser cette tâche.
  6. Analyse de Sentiment:
    • Implémentez une analyse de sentiment basique pour déterminer si les critiques filtrées expriment une opinion positive ou négative. Vous pouvez utiliser une approche simple basée sur la fréquence des mots ou utiliser une bibliothèque Python comme TextBlob.
  7. Rapport:
    • Rédigez un rapport bref qui présente les méthodes que vous avez utilisées, les défis rencontrés et les résultats de votre analyse de sentiment. Incluez des visualisations, telles que des graphiques de fréquence de mots, pour illustrer vos résultats.

Données

Les données pour cet exercice peuvent être trouvées sur le site Kaggle ou IMDb Datasets. Assurez-vous de vérifier les conditions d’utilisation avant de télécharger les données.

Ressources Nécessaires

  • Python
  • Bibliothèques Python: pandas, ntlk, spacy, matplotlib, TextBlob