Stemming e Lemmatizzazione
Cos'è lo stemming?
Lo stemming è una tecnica utilizzata per estrarre la forma base delle parole rimuovendo gli affissi da esse. È proprio come abbattere i rami di un albero fino ai suoi steli. Ad esempio, la radice delle paroleeating, eats, eaten è eat.
I motori di ricerca utilizzano lo stemming per indicizzare le parole. Ecco perché invece di memorizzare tutte le forme di una parola, un motore di ricerca può memorizzare solo le radici. In questo modo, lo stemming riduce la dimensione dell'indice e aumenta la precisione del recupero.
Vari algoritmi di stemming
In NLTK, stemmerI, che hanno stem()metodo, l'interfaccia ha tutti gli stemmer che tratteremo in seguito. Cerchiamo di capirlo con il diagramma seguente
Algoritmo di stemming di Porter
È uno degli algoritmi di stemming più comuni che è fondamentalmente progettato per rimuovere e sostituire i ben noti suffissi di parole inglesi.
Classe PorterStemmer
NLTK ha PorterStemmerclass con l'aiuto del quale possiamo facilmente implementare gli algoritmi di Porter Stemmer per la parola che vogliamo stemperare. Questa classe conosce diverse forme di parole regolari e suffissi con l'aiuto dei quali può trasformare la parola di input in una radice finale. La radice risultante è spesso una parola più breve con lo stesso significato di radice. Vediamo un esempio:
Innanzitutto, dobbiamo importare il toolkit del linguaggio naturale (nltk).
import nltk
Ora importa il file PorterStemmer class per implementare l'algoritmo di Porter Stemmer.
from nltk.stem import PorterStemmer
Quindi, crea un'istanza della classe Porter Stemmer come segue:
word_stemmer = PorterStemmer()
Ora, inserisci la parola che vuoi arginare.
word_stemmer.stem('writing')
Produzione
'write'
word_stemmer.stem('eating')
Produzione
'eat'
Esempio di implementazione completo
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('writing')
Produzione
'write'
Algoritmo di stemming di Lancaster
È stato sviluppato alla Lancaster University ed è un altro algoritmo di stemming molto comune.
LancasterStemmer classe
NLTK ha LancasterStemmercon l'aiuto del quale possiamo facilmente implementare gli algoritmi di Lancaster Stemmer per la parola che vogliamo radicare. Vediamo un esempio:
Innanzitutto, dobbiamo importare il toolkit del linguaggio naturale (nltk).
import nltk
Ora importa il file LancasterStemmer classe per implementare l'algoritmo Lancaster Stemmer
from nltk.stem import LancasterStemmer
Quindi, crea un'istanza di LancasterStemmer classe come segue -
Lanc_stemmer = LancasterStemmer()
Ora, inserisci la parola che vuoi arginare.
Lanc_stemmer.stem('eats')
Produzione
'eat'
Esempio di implementazione completo
import nltk
from nltk.stem import LancatserStemmer
Lanc_stemmer = LancasterStemmer()
Lanc_stemmer.stem('eats')
Produzione
'eat'
Algoritmo di stemming delle espressioni regolari
Con l'aiuto di questo algoritmo di stemming, possiamo costruire il nostro stemmer.
RegexpStemmer classe
NLTK ha RegexpStemmercon l'aiuto del quale possiamo facilmente implementare algoritmi Stemmer di espressioni regolari. Fondamentalmente accetta una singola espressione regolare e rimuove qualsiasi prefisso o suffisso che corrisponda all'espressione. Vediamo un esempio:
Innanzitutto, dobbiamo importare il toolkit del linguaggio naturale (nltk).
import nltk
Ora importa il file RegexpStemmer class per implementare l'algoritmo Stemmer delle espressioni regolari.
from nltk.stem import RegexpStemmer
Quindi, crea un'istanza di RegexpStemmer class e fornisce il suffisso o il prefisso che si desidera rimuovere dalla parola come segue:
Reg_stemmer = RegexpStemmer(‘ing’)
Ora, inserisci la parola che vuoi arginare.
Reg_stemmer.stem('eating')
Produzione
'eat'
Reg_stemmer.stem('ingeat')
Produzione
'eat'
Reg_stemmer.stem('eats')
Produzione
'eat'
Esempio di implementazione completo
import nltk
from nltk.stem import RegexpStemmer
Reg_stemmer = RegexpStemmer()
Reg_stemmer.stem('ingeat')
Produzione
'eat'
Algoritmo di stemming Snowball
È un altro algoritmo di stemming molto utile.
SnowballStemmer classe
NLTK ha SnowballStemmerclasse con l'aiuto del quale possiamo facilmente implementare gli algoritmi di Snowball Stemmer. Supporta 15 lingue diverse dall'inglese. Per utilizzare questa classe steaming, dobbiamo creare un'istanza con il nome della lingua che stiamo utilizzando e quindi chiamare il metodo stem (). Vediamo un esempio:
Innanzitutto, dobbiamo importare il toolkit del linguaggio naturale (nltk).
import nltk
Ora importa il file SnowballStemmer class per implementare l'algoritmo Snowball Stemmer
from nltk.stem import SnowballStemmer
Vediamo le lingue che supporta -
SnowballStemmer.languages
Produzione
(
'arabic',
'danish',
'dutch',
'english',
'finnish',
'french',
'german',
'hungarian',
'italian',
'norwegian',
'porter',
'portuguese',
'romanian',
'russian',
'spanish',
'swedish'
)
Successivamente, crea un'istanza della classe SnowballStemmer con la lingua che desideri utilizzare. Qui stiamo creando lo stemmer per la lingua "francese".
French_stemmer = SnowballStemmer(‘french’)
Ora, chiama il metodo stem () e inserisci la parola che vuoi radicare.
French_stemmer.stem (‘Bonjoura’)
Produzione
'bonjour'
Esempio di implementazione completo
import nltk
from nltk.stem import SnowballStemmer
French_stemmer = SnowballStemmer(‘french’)
French_stemmer.stem (‘Bonjoura’)
Produzione
'bonjour'
Cos'è la Lemmatizzazione?
La tecnica di lemmatizzazione è come lo stemming. L'output che otterremo dopo la lemmatizzazione è chiamato "lemma", che è una parola radice piuttosto che radice, l'output dello stemming. Dopo la lemmatizzazione, otterremo una parola valida che significa la stessa cosa.
NLTK fornisce WordNetLemmatizer class che è un sottile involucro attorno al file wordnetcorpus. Questa classe utilizzamorphy() funzione al WordNet CorpusReaderclass per trovare un lemma. Facci capire con un esempio:
Esempio
Innanzitutto, dobbiamo importare il toolkit del linguaggio naturale (nltk).
import nltk
Ora importa il file WordNetLemmatizer classe per implementare la tecnica di lemmatizzazione.
from nltk.stem import WordNetLemmatizer
Quindi, crea un'istanza di WordNetLemmatizer classe.
lemmatizer = WordNetLemmatizer()
Ora, chiama il metodo lemmatize () e inserisci la parola di cui vuoi trovare lemma.
lemmatizer.lemmatize('eating')
Produzione
'eating'
lemmatizer.lemmatize('books')
Produzione
'book'
Esempio di implementazione completo
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('books')
Produzione
'book'
Differenza tra stemming e lemmatizzazione
Cerchiamo di capire la differenza tra Stemming e Lemmatization con l'aiuto del seguente esempio:
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')
Produzione
believ
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(' believes ')
Produzione
believ
L'output di entrambi i programmi indica la principale differenza tra stemming e lemmatization. PorterStemmerclass taglia la "e" dalla parola. D'altra parte,WordNetLemmatizerclass trova una parola valida. In parole semplici, la tecnica di stemming guarda solo alla forma della parola mentre la tecnica di lemmatizzazione guarda al significato della parola. Significa che dopo aver applicato la lemmatizzazione, otterremo sempre una parola valida.