Stemming a lemmatizace v Python NLTK s příklady
⚡ Chytré shrnutí
Stemming a lematizace jsou techniky normalizace textu v Python NLTK, které redukují varianty slov na společný základ, kde stemming rychle ořezává přípony bez kontextu a lematizace vrací skutečné slovníkové slovo s použitím významu.
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 se široce používají pro předzpracování textu. Rozdíl mezi stemmingem a lematizací spočívá v tom, že stemming je rychlejší, protože ořezává 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 jazykaJedná se o techniku, při které se sada slov ve větě převede do posloupnosti, aby se zkrátilo vyhledávání. V této metodě se normalizují slova, která mají stejný význam, ale určité obměny v závislosti na kontextu nebo větě. Jinými slovy, existuje jeden kořen slova, ale mnoho variant téhož slova. Například kořen slova je „jíst“ a jeho varianty jsou „jí, jíst, snědený atd.“. Stejným způsobem se s pomocí stemmingu v Python, můžeme najít kořen slova jakékoli varianty.
Například:
He was riding. He was taking the ride.
Ve výše uvedených dvou větách je význam stejný, tj. jde o jízdu na koni v minulosti. Člověk snadno pochopí, že oba významy jsou stejné. Pro stroje jsou však obě věty odlišné. Proto je obtížné je převést do stejného datového řádku. Pokud neposkytneme stejnou datovou sadu, stroj nedokáže předpovídat. Je tedy nutné rozlišit význam každého slova, aby se sada dat připravila pro strojové učení. Zde se stemming používá ke kategorizaci stejného typu dat získáním jejich kořene.
Implementujme to pomocí Python program. NLTK má algoritmus s názvem PorterStemmerTento algoritmus přijímá seznam tokenizovaných slov a převádí je na kořenová slova.
Program pro porozumění Stemmingu
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
Code Vysvětlení:
- V NLTK je importován stem modul. Pokud importujete celý modul, program se stane těžkým, protože obsahuje tisíce řádků kódu. Z celého stem modulu jsme tedy 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.
- Postupně jsme je předávali PorterStemmeru pomocí smyčky „for“. Nakonec jsme dostali výstupní kořen slova každého slova uvedeného v seznamu.
Z výše uvedeného vyplývá, že stemming je důležitým krokem předzpracování, protože odstraňuje redundanci a variace ve stejném slově. V důsledku toho jsou data filtrována, což pomáhá při lepším strojovém trénování. Nyní předáme celou větu a zkontrolujeme její výstup.
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
Code Vysvětlení:
- Balíček PorterStemmer je importován z modulu stem.
- 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.
- Zde se vytvoří objekt pro PorterStemmer.
- Spustí se smyčka a odvození od kořene každého slova se provádí pomocí objektu vytvořeného v řádku kódu 5.
Stručně řečeno, stemming je modul pro předzpracování dat. Anglický jazyk má mnoho variant jednoho slova, což vytváří nejednoznačnost při trénování a predikci strojového učení. Pro vytvoření úspěšného modelu je nezbytné filtrovat taková slova do stejných sekvenčních dat pomocí stemmingu. Tomu se také říká normalizace.
Co je lemmatizace?
Lemmatizace V NLTK je algoritmický proces hledání lemmatu slova v závislosti na jeho významu a kontextu. Lematizace se obvykle vztahuje k morfologické analýze slov, jejímž cílem je odstranit inflekční koncovky. Pomáhá při vrácení základního nebo slovníkového tvaru slova, známého jako lemma. Metoda lematizace NLTK je založena na vestavěné funkci morph ve WordNetu. Předzpracování textu zahrnuje stemming i lemmatizaci. Mnoho lidí považuje tyto dva pojmy za matoucí. Někteří je považují za totéž, ale mezi stemmingem a lematizací je rozdíl. Lematizace je upřednostňována před prvním z níže uvedeného důvodu.
Proč je lemmatizace lepší než stemming?
Algoritmus pro stemming funguje tak, že ze slova odstraňuje příponu. V širším smyslu odstraňuje buď začátek, nebo konec slova. Lematizace je naopak výkonnější operace, která bere v úvahu morfologickou analýzu slov. Vrací lemma, což je základní tvar všech jeho ohýbacích tvarů. K vytváření slovníků a hledání správného tvaru slova jsou zapotřebí hluboké lingvistické znalosti. Stemming je obecná operace, zatímco lematizace je inteligentní operace, při které se správný tvar vyhledává ve slovníku. Lematizace tak pomáhá při tvorbě lepších slov. strojové učení rysy.
Code rozlišovat mezi lematizací a stemmingem
Nálada 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
Lemmatizace 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)))
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 stemming pro slova studies a studying, výstup je stejný (studi), ale lematizátor NLTK poskytuje pro oba tokeny jiné lema: study pro studies a studying pro studying. Takže když potřebujeme vytvořit sadu funkcí pro trénování stroje, bylo by skvělé, kdyby se preferovala lematizace.
Use Case of Lemmatizer
Lematizér minimalizuje nejednoznačnost textu. Slova jako bicycle nebo bicycles jsou převedena na základní slovo bicycle. Převádí všechna slova se stejným významem, ale s různou reprezentací, na jejich základní tvar, čímž snižuje hustotu slov a hel.ping připravte přesné funkce pro trénování stroje. Čím čistší data, tím přesnější bude váš model strojového učení. Lemmatizer NLTK také šetří paměť a výpočetní náklady.
Příklad v reálném čase ukazující použití lematizace WordNetu a POS tagování v 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)
Výstup:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Vysvětlení:
- Čtečka korpusu Wordnet je importována a WordNetLemmatizer je importován z Wordnetu.
- Tokenizace slov a tag slovních druhů se importují z nltk a výchozí slovník z kolekcí.
- Vytvoří se slovník, kde první písmeno proměnné pos_tag představuje klíč, namapovaný na hodnotu ze slovníku Wordnet.
- Text je zapsán a tokenizován a objekt lemma_function je vytvořen pro použití uvnitř smyčky.
- Smyčka se spustí a lemmatize přijímá dva argumenty: token a mapu.ping z pozice pozice pozice s hodnotou wordnet.
Python Lematizace má úzký vztah k Slovník WordNetu, takže je nezbytné toto téma dále prostudovat.

