Derivazione e lemmatizzazione in Python NLTK con esempi

⚡ Riepilogo intelligente

Stemming e Lemmatizzazione sono tecniche di normalizzazione del testo in Python NLTK che riduce le varianti delle parole a una base comune, dove la radice delle colture suffissi viene rimossa rapidamente senza contesto e la lemmatizzazione restituisce una vera parola del dizionario usando il significato.

  • 🌱 Derivazione: L'algoritmo PorterStemmer elimina i suffissi per raggiungere una radice che potrebbe non essere una parola reale.
  • 📚 Lemmatizzazione: Il WordNetLemmatizer restituisce la forma base del dizionario, chiamata lemma.
  • Differenza: La stemming è più veloce, la lemmatizzazione è più lenta ma più accurata e sensibile al contesto.
  • 🔤 Normalizzazione: Entrambi riducono la densità delle parole, in modo che le macchine trattino le varianti come un'unica caratteristica.
  • 🏷️ Etichette POS: Passare un tag di parte del discorso rende il lemmatizzatore molto più preciso.
  • 🤖 Vantaggi dell'intelligenza artificiale: Un testo più pulito e normalizzato produce caratteristiche e modelli di apprendimento automatico più efficaci.

Derivazione e lemmatizzazione in Python NLTK

In cosa consistono la derivazione e la lemmatizzazione Python NLTK?

Derivazione e lemmatizzazione in Python Le tecniche NLTK (Natural Language Threat) sono tecniche di normalizzazione del testo per l'elaborazione del linguaggio naturale. Queste tecniche sono ampiamente utilizzate per la preelaborazione del testo. La differenza tra stemming e lemmatizzazione sta nel fatto che lo stemming è più veloce perché tronca le parole senza conoscerne il contesto, mentre la lemmatizzazione è più lenta perché conosce il contesto delle parole prima dell'elaborazione.

Cos'è lo Stemming?

Stemming è un metodo di normalizzazione delle parole in Elaborazione del linguaggio naturaleÈ una tecnica in cui un insieme di parole in una frase viene convertito in una sequenza per abbreviare la ricerca. In questo metodo, le parole che hanno lo stesso significato ma alcune variazioni a seconda del contesto o della frase vengono normalizzate. In altre parole, c'è una parola radice, ma ci sono molte varianti della stessa parola. Ad esempio, la parola radice è "mangiare" e le sue varianti sono "mangia, mangiare, mangiato e così via". Allo stesso modo, con l'aiuto dello Stemming in Python, possiamo trovare la radice di qualsiasi variante.

Per esempio:

He was riding.
He was taking the ride.

Nelle due frasi precedenti, il significato è lo stesso, ovvero un'attività di equitazione svolta in passato. Un essere umano può facilmente comprendere che entrambi i significati sono identici. Per le macchine, invece, le due frasi sono diverse. Pertanto, risulta difficile convertirle nella stessa riga di dati. Se non forniamo lo stesso set di dati, la macchina non riesce a fare previsioni. È quindi necessario differenziare il significato di ogni parola per preparare il set di dati per l'apprendimento automatico. In questo caso, si utilizza lo stemming per categorizzare lo stesso tipo di dati estraendone la radice.

Implementiamolo con un Python programma. NLTK ha un algoritmo chiamato PorterStemmerQuesto algoritmo accetta un elenco di parole tokenizzate e le scompone nelle parole radice.

Programma per comprendere lo stemming

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

Produzione:

wait
wait
wait
wait

Code Spiegazione:

  • In NLTK è presente un modulo stem che viene importato. Se si importa l'intero modulo, il programma diventa pesante poiché contiene migliaia di righe di codice. Pertanto, dell'intero modulo stem, abbiamo importato solo "PorterStemmer".
  • Abbiamo preparato un elenco fittizio di dati di variazione della stessa parola.
  • Viene creato un oggetto appartenente alla classe nltk.stem.porter.PorterStemmer.
  • Abbiamo passato gli elementi a PorterStemmer uno per uno utilizzando un ciclo "for". Infine, abbiamo ottenuto la radice di ciascuna parola presente nell'elenco.

Come accennato in precedenza, lo stemming è un passaggio di pre-elaborazione importante perché rimuove la ridondanza e le variazioni all'interno della stessa parola. Di conseguenza, i dati vengono filtrati, il che contribuisce a un migliore addestramento del sistema di apprendimento automatico. Ora passiamo una frase completa e ne verifichiamo l'output.

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)

Produzione:

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

Code Spiegazione:

  • Il pacchetto PorterStemmer viene importato dal modulo stem.
  • Vengono importati pacchetti per la tokenizzazione di frasi e parole.
  • Viene scritta una frase che verrà tokenizzata nel passaggio successivo.
  • Qui viene creato un oggetto per PorterStemmer.
  • Viene eseguito un ciclo e la riduzione all'ortografia di ciascuna parola viene effettuata utilizzando l'oggetto creato nella riga di codice 5.

In breve, lo stemming è un modulo di preelaborazione dei dati. La lingua inglese presenta molte varianti di una singola parola, il che crea ambiguità nell'addestramento e nella previsione dei modelli di apprendimento automatico. Per costruire un modello efficace, è fondamentale filtrare tali parole e raggrupparle in dati sequenziali utilizzando lo stemming. Questo processo è anche noto come normalizzazione.

Cos'è la lemmatizzazione?

lemmatizzazione In NLTK, la lemmatizzazione è il processo algoritmico di individuazione del lemma di una parola in base al suo significato e contesto. La lemmatizzazione si riferisce generalmente all'analisi morfologica delle parole, che mira a rimuovere le desinenze flessionali. Aiuta a restituire la forma base o lessicale di una parola, nota come lemma. Il metodo di lemmatizzazione di NLTK si basa sulla funzione morph integrata di WordNet. La preelaborazione del testo include sia lo stemming che la lemmatizzazione. Molti trovano i due termini confusi. Alcuni li considerano sinonimi, ma esiste una differenza tra stemming e lemmatizzazione. La lemmatizzazione è preferibile al primo per il motivo seguente.

Perché la lemmatizzazione è meglio dello stemming?

L'algoritmo di stemming funziona tagliando il suffisso dalla parola. In senso più ampio, taglia l'inizio o la fine della parola. Al contrario, la lemmatizzazione è un'operazione più potente e prende in considerazione l'analisi morfologica delle parole. Restituisce il lemma, che è la forma base di tutte le sue forme flessionali. Per creare dizionari e cercare la forma corretta della parola è necessaria una conoscenza linguistica approfondita. Lo stemming è un'operazione generale, mentre la lemmatizzazione è un'operazione intelligente in cui la forma corretta viene cercata nel dizionario. Pertanto, la lemmatizzazione aiuta a formare parole migliori. machine learning caratteristiche.

Code per distinguere tra lemmatizzazione e stemming

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

Produzione:

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

lemmatizzazione 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)))

Produzione:

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

Discussione sull'output

Se si considera lo stemming per "studies" e "studying", l'output è lo stesso (studi), ma il lemmatizzatore NLTK fornisce un lemma diverso per entrambi i token: "study" per "studies" e "studying" per "studying". Pertanto, quando dobbiamo creare un set di caratteristiche per addestrare un algoritmo di machine learning, sarebbe preferibile utilizzare la lemmatizzazione.

Caso d'uso di Lemmatizzatore

Il lemmatizzatore riduce al minimo l'ambiguità del testo. Parole come bicicletta o biciclette vengono convertite nella parola base bicicletta. Converte tutte le parole con lo stesso significato ma rappresentazione diversa nella loro forma base, riducendo la densità delle parole e aiutandoping Prepara caratteristiche accurate per l'addestramento di un modello di machine learning. Più i dati sono puliti, più accurato sarà il modello. NLTK Lemmatizer consente inoltre di risparmiare memoria e risorse computazionali.

Esempio in tempo reale che mostra l'utilizzo della lemmatizzazione WordNet e del POS Tagging in 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)

Produzione:

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

Code Spiegazione:

  • Il lettore di corpus wordnet viene importato, e WordNetLemmatizer viene importato da wordnet.
  • La tokenizzazione delle parole e l'etichettatura delle parti del discorso vengono importate da nltk, mentre il dizionario predefinito proviene da collections.
  • Viene creato un dizionario in cui la prima lettera di pos_tag è la chiave, mappata al valore del dizionario wordnet.
  • Il testo viene scritto e tokenizzato, e viene creato l'oggetto lemma_function da utilizzare all'interno del ciclo.
  • Il ciclo viene eseguito e la funzione lemmatize accetta due argomenti: il token e una mappa.ping di pos_tag con il valore wordnet.

Python La lemmatizzazione ha una stretta relazione con la Dizionario WordNet, quindi è essenziale studiare questo argomento in seguito.

DOMANDE FREQUENTI

Lo stemmer di Porter è la classe PorterStemmer di NLTK. Applica la rimozione del suffisso.ping regole derivate dall'algoritmo di Martin Porter del 1980 per ridurre le parole inglesi alla loro radice, quindi "waiting", "waited" e "waits" diventano tutti "wait".

Utilizzate lo stemming quando velocità e semplicità sono più importanti della leggibilità, ad esempio nell'indicizzazione dei motori di ricerca, nell'analisi del sentiment su larga scala o nella riduzione delle caratteristiche. Scegliete la lemmatizzazione quando l'output deve essere una parola valida e leggibile dall'uomo.

La normalizzazione del testo converte le diverse forme di una parola in un'unica rappresentazione comune. La stemming e la lemmatizzazione sono due tecniche di normalizzazione che riducono la densità delle parole, in modo che un modello tratti varianti come "studio" e "studi" come un'unica caratteristica.

NLTK offre PorterStemmer (e altri strumenti di stemming come Snowball) per l'estrazione della radice e WordNetLemmatizer per la lemmatizzazione. Il lemmatizer si basa sul dizionario WordNet per restituire la forma base corretta di ogni parola.

Rimuovono le varianti ridondanti delle parole, in modo che un modello di apprendimento automatico veda caratteristiche più pulite e a dimensionalità ridotta. Un minor numero di token duplicati significa meno ambiguità durante l'addestramento e previsioni più accurate su testi mai visti prima.

I moderni modelli di intelligenza artificiale deducono automaticamente il contesto, ma WordNetLemmatizer di NLTK necessita di un tag di parte del discorso per disambiguare. Fornendo tale tag, il sistema può scegliere il lemma corretto, ad esempio trasformando "learning" in "learn" quando viene etichettato come verbo.

Una parola può essere un sostantivo o un verbo con lemmi diversi. Senza un tag di parte del discorso, WordNetLemmatizer presuppone un sostantivo. Passando il tag corretto, come verbo o aggettivo, si ottiene la forma base corretta.

No. La riduzione alla radice elimina solo i suffissi, quindi "studies" diventa "studi" e "cries" diventa "cri", che non sono parole valide. La lemmatizzazione, al contrario, restituisce sempre una parola valida presente nel dizionario, come "study".

Riassumi questo post con: