Racinage et lemmatisation dans Python NLTK avec exemples

⚡ Résumé intelligent

La racinisation et la lemmatisation sont des techniques de normalisation de texte dans Python NLTK réduit les variations de mots à une base commune, où la racinisation élimine rapidement les suffixes sans contexte et la lemmatisation renvoie un véritable mot du dictionnaire en utilisant le sens.

  • 🌱 Tige: Le PorterStemmer utilise des suffixes pour atteindre une racine qui n'est peut-être pas un vrai mot.
  • 📚 Lemmatisation: Le WordNetLemmatizer renvoie la forme de base du dictionnaire, appelée lemme.
  • Différence: La racinisation est plus rapide, la lemmatisation est plus lente mais plus précise et tient compte du contexte.
  • 🔤 Normalisation: Les deux méthodes réduisent la densité des mots afin que les machines traitent les variantes comme une seule caractéristique.
  • 🏷️ Étiquettes de point de vente : L'ajout d'une étiquette grammaticale rend le lemmatiseur beaucoup plus précis.
  • 🤖 Avantage de l'IA : Un texte normalisé et plus propre permet d'obtenir des modèles et des fonctionnalités d'apprentissage automatique plus performants.

Racinage et lemmatisation dans Python NLTK

Qu'est-ce que la tige et la lemmatisation Python NLTK ?

Racisme et lemmatisation in Python NLTK regroupe des techniques de normalisation de texte pour le traitement automatique du langage naturel. Ces techniques sont largement utilisées pour le prétraitement des textes. La différence entre la racinisation et la lemmatisation réside dans le fait que la racinisation est plus rapide car elle supprime les mots sans tenir compte du contexte, tandis que la lemmatisation est plus lente car elle prend en compte le contexte des mots avant le traitement.

Qu’est-ce que le stemming ?

Stemming est une méthode de normalisation des mots dans Traitement du langage naturelIl s'agit d'une technique qui consiste à convertir un ensemble de mots d'une phrase en une séquence afin de raccourcir la recherche. Cette méthode normalise les mots ayant le même sens mais présentant des variations selon le contexte ou la phrase. Autrement dit, il existe un mot racine, mais de nombreuses variantes de ce même mot. Par exemple, le mot racine est « manger » et ses variantes sont « mange », « mangeant », « mangé », etc. De la même manière, grâce à la racinisation… Python, nous pouvons trouver le mot racine de n'importe quelle variante.

Par exemple :

He was riding.
He was taking the ride.

Dans les deux phrases ci-dessus, le sens est identique : il s'agit d'une activité équestre passée. Un humain comprend aisément cette équivalence. En revanche, pour les machines, ces deux phrases sont différentes. Il devient donc difficile de les convertir en une même ligne de données. Si l'on ne fournit pas un ensemble de données identique, la machine ne parvient pas à effectuer de prédiction. Il est donc nécessaire de différencier le sens de chaque mot afin de préparer un ensemble de données adapté à l'apprentissage automatique. La racinisation est ici utilisée pour catégoriser les données de même type en identifiant leur racine.

Mettons cela en œuvre avec un Python programme. NLTK possède un algorithme nommé Porter StemmerCet algorithme accepte la liste des mots tokenisés et les réduit à leurs racines.

Programme pour comprendre la dérivation

from nltk.stem import PorterStemmer
e_words= ["wait", "waiting", "waited", "waits"]
ps =PorterStemmer()
for w in e_words:
    rootWord=ps.stem(w)
    print(rootWord)

Sortie :

wait
wait
wait
wait

Code Explication:

  • Il existe un module STEM dans NLTK qui est importé. Si vous importez le module complet, le programme deviendra très volumineux car il contient des milliers de lignes de code. C'est pourquoi, parmi tous les modules STEM, nous n'avons importé que « PorterStemmer ».
  • Nous avons préparé une liste factice de données de variation du même mot.
  • Un objet appartenant à la classe nltk.stem.porter.PorterStemmer est créé.
  • Nous avons traité chaque mot de la liste un par un avec PorterStemmer à l'aide d'une boucle « for ». Finalement, nous avons obtenu la racine de chaque mot de la liste.

Comme indiqué précédemment, la racinisation est une étape de prétraitement importante car elle élimine les redondances et les variations d'un même mot. Les données sont ainsi filtrées, ce qui facilite l'apprentissage automatique. Nous allons maintenant soumettre une phrase complète et vérifier le résultat.

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="Hello Guru99, You have to build a very good site and I love visiting your site."
words = word_tokenize(sentence)
ps = PorterStemmer()
for w in words:
	rootWord=ps.stem(w)
	print(rootWord)

Sortie :

hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site

Code Explication:

  • Le paquet PorterStemmer est importé du module stem.
  • Des modules de tokenisation des phrases et des mots sont importés.
  • Une phrase est écrite qui doit être symbolisée à l'étape suivante.
  • Un objet pour PorterStemmer est créé ici.
  • Une boucle est exécutée et la racinisation de chaque mot est effectuée à l'aide de l'objet créé à la ligne de code 5.

En résumé, la racinisation est un module de prétraitement des données. La langue anglaise comporte de nombreuses variations d'un même mot, ce qui crée des ambiguïtés lors de l'entraînement et de la prédiction par apprentissage automatique. Pour construire un modèle performant, il est essentiel de filtrer ces mots au sein d'une même séquence de données grâce à la racinisation. Ce processus est également appelé normalisation.

Qu’est-ce que la lemmatisation ?

Lemmatisation Dans NLTK, la lemmatisation est le processus algorithmique qui détermine le lemme d'un mot en fonction de son sens et de son contexte. Elle désigne généralement l'analyse morphologique des mots visant à supprimer leurs terminaisons flexionnelles. Elle permet de retrouver la forme de base ou la forme lexicale d'un mot, appelée lemme. La méthode de lemmatisation de NLTK repose sur la fonction morphologique intégrée de WordNet. Le prétraitement du texte comprend à la fois la racinisation et la lemmatisation. Ces deux termes sont souvent confondus, voire considérés comme synonymes. Or, il existe une différence entre la racinisation et la lemmatisation. La lemmatisation est privilégiée pour les raisons suivantes.

Pourquoi la lemmatisation est-elle meilleure que le stemming ?

L'algorithme de racinisation fonctionne en supprimant le suffixe du mot. Plus généralement, il supprime soit le début, soit la fin du mot. À l'inverse, la lemmatisation est une opération plus puissante qui prend en compte l'analyse morphologique des mots. Elle renvoie le lemme, qui est la forme de base de toutes ses formes flexionnelles. Une connaissance linguistique approfondie est nécessaire pour créer des dictionnaires et rechercher la forme correcte d'un mot. La racinisation est une opération générale, tandis que la lemmatisation est une opération intelligente qui consiste à rechercher la forme correcte dans un dictionnaire. Ainsi, la lemmatisation contribue à une meilleure formation des mots. machine learning d’APOB.

Code faire la distinction entre la lemmatisation et la racinisation

Stemming Code:

import nltk
from nltk.stem.porter import PorterStemmer
porter_stemmer  = PorterStemmer()
text = "studies studying cries cry"
tokenization = nltk.word_tokenize(text)
for w in tokenization:
print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))

Sortie :

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Lemmatisation Code:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_lemmatizer = WordNetLemmatizer()
	text = "studies studying cries cry"
	tokenization = nltk.word_tokenize(text)
	 for w in tokenization:
		print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))

Sortie :

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Discussion du résultat

Si l'on examine la racinisation de « studies » et « studying », le résultat est le même (« studi »), mais le lemmatiseur NLTK propose un lemme différent pour les deux mots : « study » pour « studys » et « studying » pour « study ». Par conséquent, lors de la création d'un ensemble de caractéristiques pour l'entraînement d'un modèle, il serait préférable que la lemmatisation soit privilégiée.

Cas d'utilisation du lemmatiseur

Le lemmatiseur minimise l'ambiguïté du texte. Des mots comme « bicyclette » ou « bicyclettes » sont convertis en leur forme de base « bicyclette ». Il convertit tous les mots ayant la même signification mais une orthographe différente en leur forme de base, réduisant ainsi la densité lexicale et facilitant le texte.ping Préparez des caractéristiques précises pour l'entraînement d'un modèle. Plus les données sont propres, plus votre modèle d'apprentissage automatique sera précis. Le lemmatiseur NLTK permet également de réduire la mémoire et les coûts de calcul.

Exemple en temps réel illustrant l'utilisation de la lemmatisation et de l'étiquetage morphosyntaxique WordNet dans Python:

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV
	text = "guru99 is a totally new kind of learning experience."
	tokens = word_tokenize(text)
	lemma_function = WordNetLemmatizer()
	for token, tag in pos_tag(tokens):
		lemma = lemma_function.lemmatize(token, tag_map[tag[0]])
		print(token, "=>", lemma)

Sortie :

guru99 => guru99
is => be
totally => totally
new => new
kind => kind
of => of
learning => learn
experience => experience
. => .

Code Explication:

  • Le lecteur de corpus WordNet est importé, et WordNetLemmatizer est importé depuis WordNet.
  • La tokenisation des mots et l'étiquetage grammatical sont importés de nltk, et le dictionnaire par défaut de collections.
  • Un dictionnaire est créé où la première lettre de pos_tag est la clé, associée à la valeur du dictionnaire wordnet.
  • Le texte est écrit et tokenisé, et l'objet lemme_function est créé pour être utilisé à l'intérieur de la boucle.
  • La boucle est exécutée, et la fonction lemmatize prend deux arguments : le jeton et une carte.ping de pos_tag avec la valeur wordnet.

Python La lemmatisation est étroitement liée à la Dictionnaire WordNetIl est donc essentiel d'étudier ce sujet ensuite.

FAQ

Le stemmer de Porter est la classe PorterStemmer de NLTK. Il applique la suppression des suffixes.ping Les règles de l'algorithme de Martin Porter de 1980 permettent de réduire les mots anglais à leur radical, de sorte que « waiting », « waited » et « waits » deviennent tous « wait ».

Utilisez la racinisation lorsque la rapidité et la simplicité priment sur la lisibilité, par exemple pour l'indexation de recherche, l'analyse des sentiments à grande échelle ou la réduction des caractéristiques. Choisissez la lemmatisation lorsque le résultat doit être un mot valide et lisible par un humain.

La normalisation textuelle convertit les différentes formes d'un mot en une représentation commune. La racinisation et la lemmatisation sont deux techniques de normalisation qui réduisent la densité des mots afin qu'un modèle traite les variantes comme « étude » et « études » comme une seule et même caractéristique.

NLTK propose PorterStemmer (et d'autres algorithmes de racinisation comme Snowball) pour la racinisation, et WordNetLemmatizer pour la lemmatisation. Ce dernier utilise le dictionnaire WordNet pour renvoyer la forme de base correcte de chaque mot.

Ils suppriment les variantes de mots redondantes, ce qui permet au modèle d'apprentissage automatique d'obtenir des caractéristiques plus claires et de moindre dimension. Moins de mots dupliqués signifient moins d'ambiguïté pendant l'entraînement et des prédictions plus précises sur des textes inconnus.

Les modèles d'IA modernes infèrent automatiquement le contexte, mais le WordNetLemmatizer de NLTK a besoin d'une étiquette grammaticale pour lever les ambiguïtés. Cette étiquette lui permet de choisir le lemme approprié, par exemple en transformant « learning » en « learn » lorsqu'il est étiqueté comme un verbe.

Un mot peut être un nom ou un verbe avec différents lemmes. Sans indication de sa catégorie grammaticale, WordNetLemmatizer le considère comme un nom. En spécifiant l'étiquette appropriée, comme verbe ou adjectif, on obtient sa forme de base correcte.

Non. La racinisation ne modifie que les suffixes, donc « studies » devient « studi » et « cries » devient « cri », qui ne sont pas des mots valides. La lemmatisation, en revanche, renvoie toujours un mot du dictionnaire comme « study ».

Résumez cet article avec :