Cos'è lo stemming?
Lo stemming è una sorta di normalizzazione delle parole. La normalizzazione è una tecnica in cui un insieme di parole in una frase viene convertito in una sequenza per abbreviarne la ricerca. Le parole che hanno lo stesso significato ma hanno qualche variazione a seconda del contesto o della frase vengono normalizzate.
In un'altra parola, c'è una parola radice, ma ci sono molte varianti delle stesse parole. Ad esempio, la radice della parola è "mangiare" e le sue variazioni sono "mangia, mangia, mangia e così via". Allo stesso modo, con l'aiuto di Stemming, possiamo trovare la radice di ogni variazione.
Per esempio
He was riding.He was taking the ride.
Nelle due frasi precedenti, il significato è lo stesso, cioè attività di equitazione nel passato. Un essere umano può facilmente capire che entrambi i significati sono gli stessi. Ma per le macchine, entrambe le frasi sono diverse. Quindi è diventato difficile convertirlo nella stessa riga di dati. Nel caso in cui non forniamo lo stesso set di dati, la macchina non riesce a prevedere. Quindi è necessario differenziare il significato di ogni parola per preparare il set di dati per l'apprendimento automatico. E qui lo stemming viene utilizzato per classificare lo stesso tipo di dati ottenendo la sua parola radice.
Implementiamolo con un programma Python. NLTK ha un algoritmo chiamato "PorterStemmer". Questo algoritmo accetta l'elenco delle parole tokenizzate e lo pone come radice nella parola radice.
Programma per la comprensione dello stemming
from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)
Uscita :
waitwaitwaitwait
Spiegazione del codice:
- C'è un modulo stem in NLTk che viene importato. Se si importa il modulo completo, il programma diventa pesante poiché contiene migliaia di righe di codici. Quindi dall'intero modulo stem, abbiamo importato solo "PorterStemmer".
- Abbiamo preparato un elenco fittizio di dati di variazione della stessa parola.
- Viene creato un oggetto che appartiene alla classe nltk.stem.porter.PorterStemmer.
- Inoltre, lo abbiamo passato a PorterStemmer uno per uno usando il ciclo "for". Infine, abbiamo ottenuto la parola radice di output di ogni parola menzionata nell'elenco.
Dalla spiegazione di cui sopra, si può anche concludere che lo stemming è considerato un'importante fase di pre-elaborazione perché ha rimosso la ridondanza nei dati e le variazioni nella stessa parola. Di conseguenza, i dati vengono filtrati e ciò contribuirà a migliorare l'addestramento della macchina.
Ora passiamo una frase completa e controlliamo il suo comportamento come output.
Programma:
from nltk.stem import PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="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:
helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite
Spiegazione del codice
- Il pacchetto PorterStemer viene importato dal gambo del modulo
- Vengono importati pacchetti per la tokenizzazione di frasi e parole
- Viene scritta una frase che deve essere tokenizzata nel passaggio successivo.
- La tokenizzazione di parole viene implementata in questo passaggio.
- Un oggetto per PorterStemmer viene creato qui.
- Viene eseguito il ciclo e la radice di ogni parola viene eseguita utilizzando l'oggetto creato nella riga di codice 5
Conclusione:
Stemming è un modulo di pre-elaborazione dei dati. La lingua inglese ha molte varianti di una singola parola. Queste variazioni creano ambiguità nell'addestramento e nella previsione dell'apprendimento automatico. Per creare un modello di successo, è fondamentale filtrare tali parole e convertirle nello stesso tipo di dati in sequenza utilizzando lo stemming. Inoltre, questa è una tecnica importante per ottenere dati di riga da un insieme di frasi e la rimozione di dati ridondanti, nota anche come normalizzazione.
Cos'è la Lemmatizzazione?
La lemmatizzazione è il processo algoritmico per trovare il lemma di una parola a seconda del loro significato. La lemmatizzazione di solito si riferisce all'analisi morfologica delle parole, che mira a rimuovere le terminazioni flessive. Aiuta a restituire la forma base o del dizionario di una parola, nota come lemma. Il metodo NLTK Lemmatization si basa sulla funzione morph incorporata di WorldNet. La preelaborazione del testo include sia lo stemming che la lemmatizzazione. Molte persone trovano i due termini confusi. Alcuni li trattano allo stesso modo, ma c'è una differenza tra i due. La lemmatizzazione è preferita alla prima per il motivo seguente.
Perché la Lemmatizzazione è meglio dello Stemming?
L'algoritmo di stemming funziona tagliando il suffisso dalla parola. In un 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 flessive. È necessaria una conoscenza linguistica approfondita per creare dizionari e cercare la forma corretta della parola. Lo stemming è un'operazione generale mentre la lemmatizzazione è un'operazione intelligente in cui la forma corretta verrà cercata nel dizionario. Quindi, la lemmatizzazione aiuta a formare migliori funzionalità di apprendimento automatico.
Codice per distinguere tra Lemmatization e Stemming
Codice derivante
import nltkfrom nltk.stem.porter import PorterStemmerporter_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 studiStemming for studying is studiStemming for cries is criStemming for cry is cri
Codice di lemmatizzazione
import nltkfrom nltk.stem import WordNetLemmatizerwordnet_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 studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry
Discussione dell'output:
Se si cerca di derivare per gli studi e lo studio, l'output è lo stesso (studi) ma lemmatizer fornisce un lemma diverso per entrambi i token studio per studi e studio per studio. Quindi, quando abbiamo bisogno di creare un set di funzionalità per addestrare la macchina, sarebbe fantastico se si preferisse la lemmatizzazione.
Caso d'uso di Lemmatizer:
Lemmatizer riduce al minimo l'ambiguità del testo. Parole di esempio come bicicletta o biciclette vengono convertite nella parola base bicicletta. Fondamentalmente, convertirà tutte le parole con lo stesso significato ma una rappresentazione diversa nella loro forma di base. Riduce la densità delle parole nel testo dato e aiuta a preparare le caratteristiche accurate per la macchina da allenamento. Più puliti i dati, più intelligente e accurato sarà il tuo modello di machine learning. Lemmatizer consente inoltre di risparmiare memoria e costi di calcolo.
Esempio in tempo reale che mostra l'uso di Wordnet Lemmatization e POS Tagging in Python
from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "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)
Spiegazione del codice
- In primo luogo, viene importato il wordnet del corpus reader.
- WordNetLemmatizer viene importato da wordnet
- La tokenizzazione di parole e parti del tag vocale vengono importate da nltk
- Il dizionario predefinito viene importato dalle raccolte
- Il dizionario viene creato dove pos_tag (prima lettera) sono i valori chiave i cui valori sono mappati con il valore del dizionario wordnet. Abbiamo preso l'unica prima lettera poiché la useremo più avanti nel ciclo.
- Il testo è scritto ed è tokenizzato.
- Viene creato l'oggetto lemma_function che verrà utilizzato all'interno del ciclo
- Il ciclo viene eseguito e lemmatize prenderà due argomenti uno è token e l'altro è una mappatura di pos_tag con valore wordnet.
Produzione:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
La lemmatizzazione ha una stretta relazione con il dizionario wordnet, quindi è essenziale studiare questo argomento, quindi lo conserviamo come argomento successivo