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