Stemming a lemmatizace v Python NLTK s příklady

V čem je stemming a lemmatizace Python NLTK?

Stemming a lemmatizace in Python NLTK jsou techniky normalizace textu pro zpracování přirozeného jazyka. Tyto techniky jsou široce používány pro předzpracování textu. Rozdíl mezi stemmingem a lemmatizací je ten, že stemming je rychlejší, protože řeže slova bez znalosti kontextu, zatímco lemmatizace je pomalejší, protože zná kontext slov před zpracováním.

Co je Stemming?

Nálada je metoda normalizace slov v Zpracování přirozeného jazyka. Je to technika, při které se sada slov ve větě převádí na sekvenci, aby se zkrátilo její vyhledávání. V této metodě jsou slova, která mají stejný význam, ale mají určité variace podle kontextu nebo věty, normalizována.

Jiným slovem je jeden kořen slova, ale existuje mnoho variant stejných slov. Například kořen slova je „jíst“ a jeho variace jsou „jí, jí, jedí a podobně“. Stejně tak s pomocí Stemming in Python, můžeme najít kořen slova jakékoli variace.

Například

He was riding.	
He was taking the ride.

Ve výše uvedených dvou větách je význam stejný, tj. jezdecká činnost v minulosti. Člověk snadno pochopí, že oba významy jsou stejné. U strojů se ale obě věty liší. Proto bylo obtížné převést jej do stejného datového řádku. V případě, že neposkytneme stejný soubor dat, pak stroj nedokáže předpovědět. Je tedy nutné rozlišovat význam každého slova, aby bylo možné připravit datovou sadu pro strojové učení. A zde se stemming používá ke kategorizaci stejného typu dat získáním jeho kořenového slova.

Implementujme to pomocí a Python program.NLTK má algoritmus pojmenovaný jako „PorterStemmer“. Tento algoritmus přijímá seznam tokenizovaných slov a převádí jej do kořenového slova.

Program pro pochopení 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)

Výstup:

wait	
wait	
wait	
wait 

Program pro porozumění Stemmingu

Vysvětlení kódu:

  • V NLTk je kmenový modul, který je importován. Pokud importujete celý modul, program se stane těžkým, protože obsahuje tisíce řádků kódů. Takže z celého kmenového modulu jsme importovali pouze „PorterStemmer“.
  • Připravili jsme fiktivní seznam variačních dat stejného slova.
  • Vytvoří se objekt, který patří do třídy nltk.stem.porter.PorterStemmer.
  • Dále jsme to předali PorterStemmerovi jeden po druhém pomocí smyčky „for“. Nakonec jsme dostali výstupní kořenové slovo každého slova uvedeného v seznamu.

Z výše uvedeného vysvětlení lze také vyvodit závěr, že stemming je považován za důležitý krok předběžného zpracování, protože odstranil nadbytečnost v datech a variace ve stejném slově. V důsledku toho jsou data filtrována, což pomůže k lepšímu strojovému tréninku.

Nyní předáme celou větu a zkontrolujeme její chování jako výstup.

Program:

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)

Výstup:

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

Program pro porozumění Stemmingu

Vysvětlení kódu:

  • Balíček PorterStemer je importován z kmene modulu
  • Importují se balíčky pro tokenizaci vět i slov
  • Je napsána věta, která má být v dalším kroku tokenizována.
  • V tomto kroku je implementována lemmatizace tokenizace slov.
  • Zde se vytvoří objekt pro PorterStemmer.
  • Spustí se smyčka a odvozování každého slova se provádí pomocí objektu vytvořeného v řádku kódu 5

Závěr:

Stemming je modul pro předzpracování dat. Anglický jazyk má mnoho variant jednoho slova. Tyto variace vytvářejí nejednoznačnost při trénování a predikci strojového učení. Chcete-li vytvořit úspěšný model, je důležité filtrovat taková slova a převést je na stejný typ sekvenovaných dat pomocí stemmingu. Je to také důležitá technika pro získání řádkových dat ze sady vět a odstranění nadbytečných dat známých také jako normalizace.

Co je lemmatizace?

Lemmatizace v NLTK je algoritmický proces hledání lemmatu slova v závislosti na jeho významu a kontextu. Lemmatizace se obvykle týká morfologické analýzy slov, jejímž cílem je odstranit flektivní koncovky. Pomáhá při vrácení základní nebo slovníkové formy slova známého jako lemma.

Metoda lemmatizace NLTK je založena na vestavěné morfovací funkci WorldNet. Předzpracování textu zahrnuje jak stemming, tak lemmatizaci. Mnoho lidí považuje tyto dva pojmy za matoucí. Někteří je považují za stejné, ale existuje rozdíl mezi stemmingem a lemmatizací. Lemmatizace je preferována před první z níže uvedených důvodů.

Proč je lemmatizace lepší než stemming?

Stemming algoritmus funguje tak, že ze slova vyjme příponu. V širším slova smyslu odřízne začátek nebo konec slova.

Lemmatizace je naopak výkonnější operace a bere v úvahu morfologickou analýzu slov. Vrací lemma, které je základním tvarem všech jeho flektivních forem. K vytváření slovníků a hledání správné formy slova jsou zapotřebí hluboké lingvistické znalosti. Stemming je obecná operace, zatímco lemmatizace je inteligentní operace, při které bude správný tvar vyhledán ve slovníku. Lematizace tedy pomáhá při lepším formování strojové učení rysy.

Kód pro rozlišení mezi lemmatizací a stemmingem

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

Výstup::

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

Lemmatizační kód:

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

Výstup:

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

Diskuse o výstupu

Pokud se podíváte na prameny pro studium a studium, výstup je stejný (studi), ale lemmatizátor NLTK poskytuje odlišné lemma pro oba tokeny studium pro studium a studium pro studium. Takže když potřebujeme vytvořit sadu funkcí pro trénování stroje, bylo by skvělé, kdyby byla preferována lemmatizace.

Use Case of Lemmatizer

Lemmatizer minimalizuje nejednoznačnost textu. Příkladová slova jako jízdní kolo nebo jízdní kola jsou převedena na základní slovo jízdní kolo. V zásadě převede všechna slova, která mají stejný význam, ale různé reprezentace, na jejich základní formu. Snižuje hustotu slov v daném textu a pomáhá při přípravě přesných funkcí pro tréninkový stroj. Čím čistší data, tím inteligentnější a přesnější bude váš model strojového učení. NLTK Lemmatizer také šetří paměť a výpočetní náklady.

Příklad v reálném čase ukazující použití lemmatizace Wordnet a označování POS 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)

Use Case of Lemmatizer

Vysvětlení kódu

  • Nejprve se importuje korpusová čtečka wordnet.
  • WordNetLemmatizer je importován z wordnetu.
  • Z nltk se importuje tokenizace aplikace Word a značky slovních částí.
  • Výchozí slovník je importován z kolekcí.
  • Slovník je vytvořen, kde pos_tag (první písmeno) jsou hodnoty klíče, jejichž hodnoty jsou mapovány s hodnotou ze slovníku wordnet. Vzali jsme jediné první písmeno, které použijeme později ve smyčce.
  • Text je napsán a je tokenizován.
  • Je vytvořen objekt lemma_function, který bude použit uvnitř smyčky.
  • Spustí se smyčka a lemmatize bude mít dva argumenty, jeden je token a druhý je mapování pos_tag s hodnotou wordnet.

Výstup:

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

Python Lematizace má úzkou souvislost s slovník wordnet, takže je nezbytně nutné toto téma nastudovat, proto si toto necháme jako další téma.