Bienvenue dans le monde étonnant du traitement du langage naturel (NLP), où les ordinateurs comprennent de mieux en mieux ce que nous disons.
Avez-vous déjà réfléchi à la manière dont les ordinateurs comprennent le langage humain ? La réponse réside dans un secret particulier : le traitement du langage naturel.
La plupart des modèles de TAL nous parlent couramment, grâce à un raffinement minutieux du texte. Dans cet article, nous allons aborder les étapes cruciales de la PNL.
Nous aborderons des sujets tels que la ponctuation, les caractères spéciaux, les mots vides, le stemming et même la lemmatisation. De la décomposition des phrases à la correction des fautes d’orthographe, nous sommes là pour rendre ces idées faciles à comprendre.
Mais ce n’est pas tout : nous abordons également des sujets plus complexes tels que le traitement des chiffres, la clarification des contractions et le maniement des balises HTML délicates. Chaque partie de notre article vous montrera le travail caché qui fait briller la PNL. Préparez-vous à découvrir comment le nettoyage et le prétraitement des textes permettent à la PNL de faire des merveilles d’une manière que vous n’auriez jamais imaginée.
Qu’est-ce que le NLP ?
Letraitement du langage naturel (TAL) revient à combiner l’informatique, le langage humain et l’intelligence artificielle. Il s’agit de créer des instructions et des outils spéciaux pour les ordinateurs afin qu’ils puissent comprendre, expliquer et créer le langage humain.
La PNL utilise les méthodes de l’informatique et de l’intelligence artificielle pour aider les ordinateurs à comprendre le sens des mots et des phrases, tout comme nous le faisons. Cela permet aux ordinateurs de mieux nous parler et de ressembler davantage à de vraies conversations. Ce domaine particulier a permis de réaliser des choses intéressantes telles que la traduction de langues, l’aide aux chatbots et la compréhension des sentiments dans les textes. C’est le point de rencontre entre la technologie et le langage.
Par exemple, le NLP est utile pour
- Réponse aux questions Chatbots
- Verrous audio pour téléphones portables et ordinateurs
- Reconnaissance de la parole
- Détection du spam dans les courriels
- Résumés
Le traitement du langage naturel (NLP) comporte deux aspects principaux :
- Lacompréhension du langage naturel (NLU) consiste à apprendre aux ordinateurs à comprendre et à interpréter le langage humain. Les algorithmes de NLU aident les ordinateurs à“comprendre” ce que les humains disent ou écrivent. Le NLU aide les ordinateurs à saisir le sens, le contexte et la structure du langage, ce qui leur permet de répondre avec précision et efficacité.
- Génération de langage naturel (NLG) : La génération de langage naturel consiste à faire en sorte que les ordinateurs produisent des textes semblables à ceux des humains. Les algorithmes de NLG prennent des données ou des informations structurées et les convertissent en phrases ou en paragraphes lisibles et cohérents. C’est comme si vous appreniez aux ordinateurs à écrire ! Le NLG utilise des modèles et des règles pour générer un contenu convivial, naturel et compréhensible.
Terminologie de base du NLP
- Corpus: Il s’agit d’une vaste collection de documents textuels tels que des nouvelles, des tweets, des informations, etc. Il est utile aux ordinateurs pour apprendre. Par exemple, un corpus se compose de documents (Document-1, Document-2, Document-3……….)
- Document: Le document est composé de différents paragraphes.
- Token et tokenisation: Les tokens sont des parties plus petites des phrases, et la tokenisation est le processus de conversion des phrases en tokens. Ex – Supposons qu’il s’agisse d’une phrase : “Je m’appelle Sanket”. Après tokenisation, nous obtiendrons [“Mon”, “Nom”, “est”, “Sanket”]
- Morphine (mot de base): Le plus petit mot significatif sans préfixe ni suffixe. Ex- “Inconfortable” : “Un” “Confort” “Capable”. Ici, notre mot de base est donc Confort.
Maintenant, explorons chacune des étapes et des techniques de nettoyage de texte !
Techniques de nettoyage de texte
Suppression des entités bruyantes
La suppression des entités parasites est une étape cruciale du NLP, au cours de laquelle les entités non pertinentes ou sans signification sont identifiées et supprimées des données textuelles.
En éliminant les entités telles que les termes génériques, les symboles et les noms sans rapport, le texte devient plus ciblé et plus précis, ce qui améliore la qualité des tâches de NLP telles que l’analyse des sentiments et la reconnaissance des entités nommées. Ce processus garantit que les analyses sont basées sur un contenu significatif, dépourvu d’éléments distrayants ou sans importance.
a] Suppression des caractères spéciaux et de la ponctuation :
Une partie de ce processus consiste à éliminer les caractères spéciaux et la ponctuation. Il s’agit des lettres et symboles anormaux, tels que les smileys ou les lettres étrangères. Il s’agit également des points, des virgules et des marques qui permettent d’organiser les phrases.
Voici pourquoi cela est important – Ces caractères et marques peuvent compliquer la lecture des mots. Ils peuvent perturber les machines qui tentent de comprendre les mots ou d’en déterminer le sens. Nous les supprimons donc pour que les machines comprennent mieux les mots et puissent faire leur travail, comme comprendre le sens des mots ou découvrir ce que les gens ressentent à l’écrit.
Voici quelques exemples de caractères spéciaux et de ponctuation qui sont souvent supprimés :
| # ‘“ , .% & ^*! @ ( ) _ = – [ ]$ > \ { } ` ~; : / ? <
Voici un code Python qui vous permettra de comprendre comment vous pouvez supprimer la ponctuation d’un texte :
import nltk
from nltk.tokenize import word_tokenize
nltk.download('punkt') # Téléchargez le tokenizer punkt
# Définir la fonction
def remove_punctuation(text) :
words = word_tokenize(text) # Tokeniser le texte en mots
words_without_punct = [word for word in words if word.isalnum()] # Ne garder que les mots alphanumériques
clean_text = ' '.join(words_without_punct) # Réunir les mots en un texte nettoyé
return clean_text
# Exemple de texte d'entrée avec ponctuation
input_text = "Bonjour à tous ! Comment allez-vous ?"
# Supprimez la ponctuation à l'aide de nltk
cleaned_text = remove_punctuation(input_text)
print("Texte d'entrée :", texte_entrée)
print("Texte nettoyé :", texte_nettoyé)
Résultat :
Texte d'entrée : Bonjour à tous ! Comment allez-vous ?
Texte nettoyé : Bonjour à tous ! Comment allez-vous ?
b] Suppression des mots vides :
Les mots vides sont des mots courants que nous utilisons comme “the”, “and”, “is”, et “in” qui apparaissent fréquemment dans une langue mais qui n’ont souvent pas de signification significative en eux-mêmes. L’objectif du NLP étant d’obtenir des informations utiles à partir de données textuelles, il est essentiel de supprimer les mots vides. Les mots d’arrêt peuvent affecter des tâches telles que la classification des textes, l’analyse des sentiments et la modélisation des sujets en introduisant une complexité inutile et en faussant potentiellement les résultats.
Pour améliorer l’efficacité des tâches NLP, diverses méthodes sont utilisées pour identifier et supprimer les mots vides. Une approche courante consiste à utiliser des listes prédéfinies de mots vides spécifiques à une langue. Ces listes contiennent des mots qui sont généralement considérés comme ayant peu de valeur sémantique. Les bibliothèques NLP, comme NLTK ou spaCy en Python, proposent des listes de mots vides intégrées qui peuvent être utilisées à cette fin.
import nltk
from nltk.corpus import stopwords
nltk.download('punkt')
nltk.download('stopwords')
# Exemple de phrase avec plus de mots d'arrêt
sentence = 'Il y a tellement de films dans le monde, mais peu d'entre eux ont pu gagner un Oscar'
# Tokeniser la phrase
words = nltk.word_tokenize(sentence)
# Chargement des mots cachés anglais
stop_words = set(stopwords.words('english'))
# Supprimez les mots d'arrêt
filtered_words = [w for w in words if w.lower() not in stop_words]
print("Phrase originale :", phrase)
print("Après suppression des mots d'arrêt :", " ".join(mots_filtrés))
Résultat :
Phrase originale : Il y a tellement de films dans le monde, mais peu d'entre eux ont réussi à gagner un Oscar.
Après la suppression des mots-clés : Beaucoup de films dans le monde, peu d'entre eux ont pu gagner l'Oscar.
Passons maintenant à la correction orthographique !
c] Vérification et correction de l’orthographe :
La vérification de l’orthographe joue un rôle crucial dans le nettoyage des textes en identifiant et en corrigeant les fautes d’orthographe dans le contenu écrit. Une orthographe inexacte peut créer la confusion et avoir un impact négatif sur la crédibilité du texte. La vérification automatique de l’orth ographe permet de s’assurer que le texte ne contient pas d’erreurs et qu’il communique efficacement le message voulu. Dans divers domaines, notamment la communication, la création de contenu et l’analyse de données, une orthographe précise est essentielle pour maintenir le professionnalisme et garantir une analyse exacte.
Plusieurs techniques sont utilisées pour la correction automatique de l’orthographe. Une approche courante consiste à utiliser des dictionnaires ou des modèles de langage prédéfinis contenant une liste de mots correctement orthographiés.
from spellchecker import SpellChecker
# Créez un objet SpellChecker
spell = SpellChecker()
# Echantillon de texte avec des fautes d'orthographe
text = "J'ai une bonne idée pour améliorer l'efficacité de notre processus."
# Tokeniser le texte
words = text.split()
# Trouver et corriger les mots mal orthographiés
mots_corrigés = [spell.correction(word) for word in words]
# Joindre les mots corrigés pour former le texte corrigé
texte_corrigé = " ".join(mots_corrigés)
print("Texte original :", texte)
print("Texte corrigé :", texte_corrigé)
Résultat :
Texte original : J'ai une bonne idée pour améliorer l'efficacité de notre processus.
Texte corrigé : J'ai une idée géniale pour améliorer l'efficacité de notre processus.
Nous allons maintenant comprendre comment traiter les valeurs numériques dans le cadre du NLP :
d] Traitement des valeurs numériques et des entités nominales :
Les informations numériques et les informations sur les dates sont des types de données courantes qui apparaissent dans les textes en langage naturel. Elles peuvent consister en des informations importantes telles que des quantités, des mesures, des prix, des dates, des heures, des durées, etc.
Par exemple, le nombre 1000 peut être écrit comme “mille”, “1 000”, “1K”, “103” ou “千” dans différents contextes.
Pour surmonter ces difficultés, les systèmes NLP doivent utiliser des stratégies d’encodage ou de normalisation des données numériques et datées. L’encodage consiste à transformer les données en une représentation adaptée au traitement ou à l’analyse. La normalisation consiste à convertir les données en une forme standard ou cohérente plus facile à comparer ou à manipuler.
Stratégies pour surmonter ces défis :
Latokenisation: Diviser le texte en unités plus petites comme les mots, les chiffres, les symboles et la ponctuation. Elle permet de reconnaître les données numériques et les dates dans un texte. (Comme mentionné précédemment)
L’analyse syntaxique: Analyse de la structure et du sens du texte à l’aide de la grammaire et de la logique. Il clarifie le contexte des données numériques et des dates, en résolvant les ambiguïtés.
Conversion: Modification des formats de données numériques et de dates dans un souci de cohérence. Elle permet de normaliser les informations à l’aide d’un système commun.
Extraction: Identifier et isoler les données numériques et datées à l’aide de modèles ou de règles. Elle permet de capturer les informations pertinentes à des fins d’analyse ou de traitement.
Ce code extraira les valeurs numériques à l’aide d’expressions régulières. Nous utilisons la bibliothèque dateutil pour extraire les données :
import re
from dateutil.parser import parse
# Exemple de texte contenant des informations numériques et des dates
text = "Les ventes pour l'année 2023 ont atteint 100 000 $ le 2023-08-31."
# Extrayez les informations numériques à l'aide d'expressions régulières
numerical_entities = [int(match) for match in re.findall(r'\d ', text)]
# Extraction d'informations sur les dates à l'aide de la bibliothèque dateutil
date_entities = parse(text, fuzzy_with_tokens=True)[0]
print("Entités numériques :", numerical_entities)
print("Entités de la date :", dates_entités)
Résultat :
Entités numériques : [2023, 100000, 2023, 08, 31]
Entités de date : 2023-08-31 00:00:00
Nous pouvons donc extraire des entités numériques de notre texte.
e] Gestion des contractions et des abréviations :
Lorsque nous réduisons des mots comme “I’m” pour “I am” ou “NLP” pour “Natural Language Processing”, il s’agit de contractions et d’abréviations. Il est important pour les systèmes de traitement du langage naturel de les rallonger. Cela permet d’épurer le texte, de le rendre plus facile à comprendre et d’éviter toute confusion. L’expansion des contractions et des abréviations peut aider à :
- Améliorer la cohérence et les performances des modèles de PNA.
- Réduire l’utilisation de la mémoire et la charge de calcul.
- Clarifier les ambiguïtés et préserver le sentiment.
- Différentes méthodes, dont les dictionnaires, les règles et l’apprentissage automatique, peuvent être utilisées pour développer les contractions et les abréviations, chacune ayant ses avantages et ses inconvénients.
Approches pour le traitement des contractions et des abréviations :
- Basées sur les dictionnaires
- Basée sur la grammaire
- Basée sur l’apprentissage automatique
Approche simple basée sur le dictionnaire :
Ce code développe les contractions et les abréviations.
# Exemple de texte avec contractions et abréviations
text = "Je suis heureux de vous voir et j'ai hâte de discuter de la PNL"
# Dictionnaire des contractions avec leur signification
contraction_dict = {
"Je suis" : "Je suis",
"ne peut pas" : "ne peut pas"
# Ajoutez d'autres contractions et leurs expansions si nécessaire
}
# Fonction d'expansion des contractions
def expand_contractions(text, contraction_dict) :
mots = texte.split()
mots_élargis = [contraction_dict.get(word, word) for word in words]
texte_élargi = " ".join(mots_élargis)
retour texte_élargi
texte_élargi = expand_contractions(text, contraction_dict)
print("Texte original :", texte)
print("Texte élargi :", texte_élargi)
Texte original : Je suis heureux de vous voir et j'ai hâte de discuter de la PNL.
Texte développé : Je suis heureux de vous voir et j'ai hâte de discuter de la PNL.
Nous pouvons ajouter ou supprimer des abréviations et des contractions selon nos besoins.
f] Traitement des balises HTML et du balisage :
Les balises HTML sont écrites à l’intérieur de crochets (< et >) et sont généralement présentées par paires, comme
et
pour un paragraphe. Les balises HTML sont des codes qui formatent les pages web et influencent l’affichage du contenu. Elles peuvent compliquer l’analyse du texte en introduisant du bruit et en modifiant la structure. Cependant, elles offrent des indices sémantiques utiles pour des tâches telles que le résumé.Pour traiter les balises HTML dans les données textuelles, nous pouvons utiliser certaines techniques pour supprimer les balises HTML et préserver le contenu du texte. L’élimination des balises HTML consiste à supprimer ou à remplacer les balises HTML des données textuelles, tandis que la préservation du contenu textuel consiste à conserver ou à obtenir le texte brut des données textuelles.
Techniques de gestion des balises HTML :
Expression régulière: Supprime rapidement les balises HTML, mais peut s’avérer imprécise si les balises sont complexes.
Analyseur HTML: Comprend précisément les balises, mais peut être plus lent et plus complexe.
Web Scraper: Permet d’extraire facilement du texte brut des pages web, mais sa disponibilité peut être limitée.
Voici le code pour réaliser ceci en utilisant BeautifulSoup:
from bs4 import BeautifulSoup
importation de requêtes
import re
# URL de la page web dont il faut extraire le texte
url = "https://www.example.com" # Remplacer par l'URL réelle
# Récupérer le contenu HTML de la page web
response = requests.get(url)
html_content = response.content
# Créer un objet BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Supprimez les balises HTML en utilisant des expressions régulières
cleaned_text = re.sub(r'<.*?>', '', soup.get_text())
print("HTML original :")
print(html_content)
print("Texte nettoyé (sans balises HTML) :")
print(texte_nettoyé)
Pour exécuter le code ci-dessus, vous devez remplacer “https://www.example.com” par un lien réel. Avec l’aide de BeautifulSoup, vous récupérerez le contenu de ce site web. Après le web scrapping, vous supprimerez les balises HTML à l’aide d’expressions régulières.
Passons maintenant au prétraitement du texte.
Prétraitement du texte
Dans tout projet de TAL, la tâche initiale est le prétraitement du texte. Le prétraitement consiste à organiser le texte d’entrée dans un format cohérent et analysable. Cette étape est essentielle pour créer une application NLP remarquable.
Il existe différentes manières de prétraiter un texte :
- Tokenisation
- La normalisation
- Normalisation
L’une des étapes les plus importantes est la tokenisation. La tokenisation consiste à diviser une séquence de données textuelles en mots, termes, phrases, symboles ou autres composants significatifs appelés “tokens”. Il existe de nombreux outils à code source ouvert permettant d’effectuer le processus de tokenisation.
La tokenisation
La tokenisation est la phase initiale de tout processus de NLP et influence de manière significative l’ensemble du pipeline. En utilisant un tokenizer, les données non structurées et les textes en langage naturel sont segmentés en fragments gérables. Ces fragments, appelés ” tokens”, peuvent être traités comme des composants distincts. Dans un document, la fréquence des jetons peut être exploitée pour créer un vecteur qui représente le document.
Cette transformation rapide convertit une chaîne brute et non structurée (document texte) en une structure numérique adaptée à l’apprentissage automatique. Les jetons ont le potentiel d’ordonner directement aux ordinateurs d’initier des actions et des réponses utiles. Ils peuvent également servir d’attributs dans une séquence d’apprentissage automatique, déclenchant des décisions ou des comportements plus complexes.
La tokenisation implique la division du texte en phrases, mots, caractères ou sous-mots. Lorsque nous segmentons le texte en phrases, on parle de tokenisation des phrases. En revanche, si nous le décomposons en mots, on parle de tokenisation des mots.
Il existe différents types de tokenisation :
Exemple de tokenisation de phrase:
sent_tokenize("Mon film préféré est gratuit")
–> [“Mon film préféré est le gars libre”]
Exemple de tokenisation de mot:
Word_tokenize("Elon musk est un homme d'affaires")
–> [“Elon”, “musk”, “is”, “a”, “Businessman”]
a] Tokénisation des espaces vides
La forme la plus simple de tokenisation consiste à diviser le texte à chaque fois qu’il y a un espace ou un espace blanc. Cela revient à découper une phrase en morceaux à chaque fois qu’il y a un espace. Bien que cette approche soit simple, elle peut ne pas traiter efficacement la ponctuation ou les cas particuliers.
Exemple de tokenisation des espaces blancs :
“Le traitement du langage naturel est incroyable !”
–> [“naturel”, “langage”, “traitement”, “est”, “étonnant !”].
b] Tokénisation par expression régulière
La tokenisation par expressions régulières consiste à utiliser des modèles pour définir l’endroit où diviser le texte en jetons. Cela permet une tokénisation plus précise, gérant mieux la ponctuation et les cas spéciaux qu’un simple découpage de l’espace blanc.
Exemple de tokenisation par expression régulière :
“Envoyez-moi un courriel à jack.sparrow@blackpearl.com.”
–> [“Email”, “me”, “at”, “jack”, “.”, “sparrow”, “@”, “blackpearl”, “.”, “com”, “.”]
c] Tokénisation des mots et des sous-mots
Cette approche se concentre sur la préservation des signes de ponctuation en tant que jetons distincts. Elle est particulièrement utile lorsque le maintien du sens de la ponctuation est crucial, comme dans l’analyse des sentiments.
La tokenisation des sous-mots divise les mots en unités significatives plus petites, telles que les syllabes ou les parties de mots. Elle est particulièrement utile pour les langues dont la structure des mots est complexe.
Exemple de tokenisation de mots:
“Wow ! C’est incroyable.”
–> [“Wow”, ” !”, “This”, “is”, “incredible”, “.”]
Exemple de tokenisation de sous-mots:
“incroyable”
–> [“un”, “believable”]
d] Tokénisation par codage de paires d’octets (BPE)
Le codage par paires d’octets est une technique de tokenisation de sous-mots qui divise les mots en unités plus petites en fonction de leur fréquence d’apparition. Cette technique est particulièrement utile pour traiter les mots rares ou hors vocabulaire.
e] La tokenisation des banques d’arbres
La tokenisation des banques d’arbres utilise des règles prédéfinies basées sur des conventions linguistiques pour tokeniser le texte. Elle prend en compte des facteurs tels que les contractions et les mots avec trait d’union.
Exemple : “Je n’arrive pas à croire que nous sommes le 23 août !”
–> [“I”, “can”, “‘t”, “believe”, “it”, “‘s”, “August”, “23rd”, ” !”].
Voilà donc les types de tokenisation. Nous allons maintenant passer à la normalisation du texte.
Normalisation du texte
Minuscules et majuscules
La normalisation des textes consiste à convertir le texte dans la même casse, généralement en minuscules, afin d’en faciliter le traitement et l’analyse. La normalisation des textes consiste à mettre toutes les lettres d’un texte dans la même position, souvent en minuscules, afin de faciliter le travail. Cela est utile dans des domaines tels que l’analyse du langage, où nous utilisons des ordinateurs pour comprendre les mots et les phrases. Cela revient à mettre de l’ordre dans le texte pour que les ordinateurs puissent mieux le comprendre.
Cela permet de rendre le texte plus cohérent et d’éliminer les confusions. Par exemple, si nous comptons la fréquence d’apparition des mots, nous voulons que “Apple” et “pomme” soient considérés comme la même chose. Nous ne voulons pas que l’ordinateur les traite comme des mots différents simplement à cause de la majuscule. C’est comme si nous étions justes envers tous les mots !
Mais il arrive que nous ne suivions pas cette règle. Parfois, les grandes majuscules sont importantes. Par exemple, en informatique, nous avons des noms pour les choses qui doivent rester les mêmes, comme “UK” ou “NASA”. De même, si quelqu’un écrit en grosses lettres, comme “STOP !” ou “SOS”, la signification est différente ou la personne peut montrer ses émotions.
Une autre chose à savoir est qu’il existe différents styles d’écriture. Parfois, dans le code informatique, les mots sont joints comme ceci ou séparés par des points de repère.
En résumé, normaliser la casse d’un texte revient à lui donner une belle coupe de cheveux pour que les ordinateurs puissent le comprendre. Mais n’oubliez pas qu’il existe des cas particuliers où nous dérogeons à la règle pour de bonnes raisons.
Ce code vérifie si deux mots, “Apple” et “apple”, sont identiques en les convertissant en minuscules. Si c’est le cas, il affichera qu’ils sont identiques ; sinon, il affichera qu’ils sont différents.
# Standardisation de la casse du texte
mot1 = "Pomme"
mot2 = "pomme"
# Convertir les mots en minuscules
word1_lower = word1.lower()
word2_lower = word2.lower()
# Comparaison de mots normalisés
si mot1_inférieur == mot2_inférieur :
print("Les mots sont les mêmes lorsque la casse est ignorée.")
sinon :
print("Les mots sont différents même si la casse est ignorée.")
Résultat :
Les mots sont les mêmes lorsque la casse est ignorée.
Passons à la normalisation.
Normalisation
La normalisation est le processus par lequel les jetons sont convertis en leur forme de base. Lors de la normalisation, la désinence est retirée du mot pour obtenir sa forme de base.
L’objectif de la normalisation est de réduire les variations dans le texte qui n’ont pas de signification significative mais qui peuvent affecter la précision des tâches NLP. Différentes formes de normalisation sont utilisées pour relever des défis spécifiques en matière de traitement de texte.
Par exemple,
am, are, is => be
cat, cats, cat’s, cats’ => cat
Appliquons la normalisation à la phrase ci-dessous :
Tous les chats du Don sont de couleurs différentes => Tous les chats du Don sont de couleurs différentes
Il existe des méthodes populaires de normalisation dans le domaine du NLP.
- La troncature
- Lemmatisation
a] La troncature
Avant de plonger dans le stemming, familiarisons-nous avec le terme“stem” Le radical est la forme de base d’un mot. Lorsque nous leur ajoutons des parties supplémentaires, cela s’appelle la flexion, et c’est ainsi que nous créons de nouveaux mots.
Les mots souches sont les mots qui restent après avoir supprimé les préfixes et les suffixes d’un mot. Parfois, la troncature peut produire des mots qui ne figurent pas dans le dictionnaire ou qui n’ont pas de sens. Par conséquent, le stemming n’est pas aussi efficace qu’une technique de lemmatisation dans diverses tâches.
Ex- “Rapidement”, “Plus vite”, “Le plus vite”
Mot tronqué – “Quickli” (pas un mot du dictionnaire)
Ex – “Les grenouilles dansent et les chiens chantent”
Tokens à base : [‘frog’, ‘are’,‘danc‘, ‘and’, ‘dog’, ‘are’, ‘sing’]
Sur le plan du tronc commun : Un plus grand nombre de lettres ou plus d’une racine correspondent au même mot, ce qui entraîne la perte du sens initial.
Ex : “Computer”, “Compute” et “Computation” –> “Comput”
Sous-catégorisation: Regardez cet exemple
Ex- “Jumping”, “Jumped”, et “Jumps” –> “Jumping”, “Jumped”, et “Jumps”.
Ici, les trois mots auraient dû être ramenés au mot de base “jump”, mais l’algorithme n’a pas réussi à le capturer.
Types de stemmers dans NLTK :
- PorterStemmer,
- LancasterStemmer,
- SnowballStemmer, etc.
Nous utilisons les trois stemmers (PorterStemmer, LancasterStemmer, SnowballStemmer) pour le stemming. Il décompose la phrase en mots individuels, puis essaie trois manières différentes de rendre les mots aussi courts que possible, et imprime les mots tronqués à des fins de comparaison.
import nltk
from nltk.stem import PorterStemmer, LancasterStemmer, SnowballStemmer
from nltk.tokenize import word_tokenize
nltk.download('punkt')
# Exemple de phrase
sentence = "les grenouilles dansent et les chiens chantent"
tokens = word_tokenize(sentence)
# Stemmers
stemmers = [PorterStemmer(), LancasterStemmer(), SnowballStemmer("english")]
pour stemmer dans stemmers :
stemmed_tokens = [stemmer.stem(token) for token in tokens]
print(f"{stemmer.__class__.__name__} Tokens Stemmed :", stemmed_tokens)
Résultat :
PorterStemmer Tokens : ['frog', 'are', 'danc', 'and', 'dog', 'are', 'sing', '.]
Tokens de LancasterStemmer : ['frog', 'ar', 'dant', 'and', 'dog', 'ar', 'sing', '.']
SnowballStemmer Stemmed Tokens : ['frog', 'are', 'danc', 'and', 'dog', 'are', 'sing', '.']
Il existe de nombreuses autres bibliothèques pour faire la même chose. Essayons maintenant de comprendre ce qu’est la lemmatisation :
b] La lemmatisation
La lemmatisation est la même chose que le stemming, à quelques détails près. La lemmatisation convertit les mots en formes de base significatives. La lemmatisation est une procédure qui permet d’obtenir la forme de base du mot avec la signification appropriée selon les relations de vocabulaire et de grammaire.
La lemmatisation est un moyen de transformer un mot en sa forme de base ou normale, appelée lemme. Par exemple, la forme normale du mot “chats” est “cat”, et la forme normale de “running” est “run”.
La lemmatisation doit connaître le type de mot et le sens d’un mot dans une phrase, ainsi que la situation plus large autour de cette phrase. Contrairement à la suppression des terminaisons de mots, la lemmatisation essaie de choisir la forme normale appropriée en fonction de la situation.
Vous pouvez choisir l’un des lemmatiseurs ci-dessous en fonction de vos besoins :
- Wordnet Lemmatizer
- Lemmatiseur Spacy
- TextBlob
- CLiPS Pattern
- Stanford CoreNLP
- Gensim Lemmatizer
- TreeTagger
Nous allons utiliser la bibliothèque NLTK pour effectuer une lemmatisation à l’aide de WordnetLemmatizer. Il commence par tokeniser la phrase, puis effectue une lemmatisation pour trouver des mots de base significatifs à partir du vocabulaire, et les replace ensuite pour imprimer la phrase lemmatisée.
import nltk
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
nltk.download('punkt')
nltk.download('wordnet')
# Créez un objet lemmatiseur
lemmatizer = WordNetLemmatizer()
# Exemple de phrase
sentence = "les garçons courent et les moustiques volent"
# Tokeniser la phrase
tokens = word_tokenize(sentence)
# Lemmatisation des tokens
lemmatized_tokens = [lemmatizer.lemmatize(token) for token in tokens]
# Joignez les jetons lemmatisés pour former une phrase
phrase_lemmatisée = " ".join(lemmatized_tokens)
print("Phrase originale :", phrase)
print("Phrase lemmatisée :", phrase_lemmatisée)
Résultat :
Phrase originale : les garçons courent et les moustiques volent.
Phrase lemmatisée : Les garçons courent et les moustiques volent.
Maintenant, il est temps de conclure !
Conclusion
Dans cet article, nous avons exploré les bases du traitement du langage naturel (TAL). Nous avons appris l’importance du TAL dans différents domaines et avons commencé notre voyage en comprenant comment nettoyer et préparer un texte. Nous avons abordé la suppression des caractères spéciaux, la tokenisation du texte, etc. Nous avons également compris des concepts tels que la normalisation, le stemming, la lemmatisation et le traitement des nombres et des dates. En outre, nous avons eu un aperçu du traitement du contenu HTML.
Cependant, notre voyage continue. Il y a tout un monde de méthodes avancées de nettoyage de texte à découvrir. Nous allons nous plonger dans l’étiquetage Part-of-Speech, explorer différents outils et bibliothèques, et nous plonger dans des projets NLP passionnants. Cet article n’est qu’un début ; soyez prêts pour la deuxième partie, qui vous apportera encore plus de connaissances.
Si vous souhaitez apprendre le traitement du langage naturel, voici quelques-uns des meilleurs cours de TAL.