Stemming és Lemmatization a Python NLTK-val

Tartalomjegyzék:

Anonim

Mi a Stemming?

A származtatás egyfajta normalizálás a szavakra. A normalizálás egy olyan technika, ahol a mondatban szereplő szavak halmazát szekvenciává alakítják, hogy lerövidítsék a keresést. Azok a szavak normalizálódnak, amelyek jelentése azonos, de a szövegkörnyezet vagy a mondat szerint némi eltérést mutat.

Egy másik szóban van egy alapszó, de ugyanazoknak a szavaknak sok változata van. Például az alapszó az "enni", és ennek variációi: "eszik, eszik, eszik és hasonlók". Ugyanígy a Stemming segítségével megtalálhatjuk az esetleges variációk gyökérszavát.

Például

He was riding.He was taking the ride.

A fenti két mondatban a jelentés megegyezik, vagyis a lovaglási tevékenység a múltban. Az ember könnyen megértheti, hogy mindkét jelentés azonos. De a gépeknél mindkét mondat különbözik. Így nehéz lett átalakítani ugyanarra az adatsorra. Ha nem ugyanazt az adatsort adjuk meg, akkor a gép nem tud megjósolni. Tehát meg kell különböztetni az egyes szavak jelentését az adatkészlet gépi tanulás előkészítéséhez. És itt a stemming segítségével azonos típusú adatokat kategorizálhatunk a gyökérszó megszerzésével.

Végezzük el ezt egy Python programmal. Az NLTK rendelkezik "PorterStemmer" nevű algoritmussal. Ez az algoritmus elfogadja a tokenizált szavak listáját, és gyökér szóvá alakítja.

Program a Stemming megértéséhez

from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)

Kimenet :

waitwaitwaitwait

Kód Magyarázat:

  • Az NLTk-ben van egy importált modul. Ha a teljes modult importálja, akkor a program nehézzé válik, mivel több ezer sornyi kódot tartalmaz. Tehát a teljes szármodulból csak a "PorterStemmer" -t importáltuk.
  • Előkészítettük az azonos szó variációs adatainak dummy listáját.
  • Létrejön egy objektum, amely az nltk.stem.porter.PorterStemmer osztályba tartozik.
  • Továbbá egyenként továbbítottuk a PorterStemmer-nek a "for" ciklus használatával. Végül megkaptuk a listában említett egyes szavak kimeneti gyökérszavát.

A fenti magyarázatból arra is lehet következtetni, hogy a származtatást fontos előfeldolgozási lépésnek tekintik, mivel eltávolította az adatok redundanciáját és ugyanazon szó variációit. Ennek eredményeként az adatok kiszűrődnek, ami elősegíti a jobb gépi kiképzést.

Most egy teljes mondatot adunk meg, és kimenetként ellenőrizzük a viselkedését.

Program:

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)

Kimenet:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Kód Magyarázat

  • A PorterStemer csomag a modul szárából származik
  • A mondatok és a szavak tokenizálására szolgáló csomagok importálásra kerülnek
  • Olyan mondatot írnak, amelyet a következő lépésben be kell kódolni.
  • A Word tokenizáció ebben a lépésben valósul meg.
  • Itt jön létre egy objektum a PorterStemmer számára.
  • A hurok lefut, és az egyes szavak szúrása az 5. kódsorban létrehozott objektum segítségével történik

Következtetés:

A Stemming egy adat-előfeldolgozó modul. Az angol nyelv egyetlen változatának sok változata van. Ezek a variációk kétértelműséget okoznak a gépi tanulás és az előrejelzés terén. A sikeres modell létrehozásához elengedhetetlen az ilyen szavak szűrése és azonos típusú szekvenált adatokká való konvertálása a stemming használatával. Ez szintén fontos technika a sorok adatainak megszerzéséhez egy mondatkészletből és a felesleges adatok eltávolításának, más néven normalizálásnak.

Mi az a Lemmatization?

A lemmatizálás egy szó lemma megtalálásának algoritmikus folyamata, jelentésüktől függően. A lemmatizáció általában a szavak morfológiai elemzésére utal, amelynek célja az inflexiós végződések eltávolítása. Segít a szó alap- vagy szótári alakjának visszaadásában, amely lemma néven ismert. Az NLTK Lemmatization módszer a WorldNet beépített morph függvényén alapszik. A szöveges előfeldolgozás magában foglalja mind a származtatást, mind a lemmatizálást. Sokan zavarosnak találják a két kifejezést. Egyesek ugyanúgy kezelik ezeket, de van különbség mindkettő között. A lemmatizációt előnyben részesítik az előbbivel szemben az alábbi ok miatt.

Miért jobb a Lemmatization, mint a Stemming?

A származtatott algoritmus úgy működik, hogy kivágja a szó utótagját. Tágabb értelemben a szó elejét vagy végét vágja.

Éppen ellenkezőleg, a Lemmatization egy erőteljesebb művelet, amely figyelembe veszi a szavak morfológiai elemzését. Visszaadja a lemmát, amely minden inflexiós alakjának alapformája. A szótárak létrehozásához és a szó megfelelő alakjának megkereséséhez mélyreható nyelvtudásra van szükség. A származtatás általános művelet, míg a lemmatizálás intelligens művelet, ahol a megfelelő formát a szótárban keresik. Ezért a lemmatizálás segíti a jobb gépi tanulási funkciók kialakítását.

Kód a Lemmatization és a Stemming megkülönböztetésére

Származási kód

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

Kimenet:

Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri

Lemmatization kód

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

Kimenet:

Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry

A kimenet megbeszélése:

Ha a tanulmányokhoz és a tanuláshoz kötődik, akkor a kimenet megegyezik (studi), de a lemmatizer mind a tokenek tanulmányozásához, mind a tanuláshoz különböző jeleket kínál. Tehát amikor a gép vonatkészletére van szükségünk, nagyon jó lenne, ha a lemmatizációt részesítenénk előnyben.

A Lemmatizer használata:

A Lemmatizer minimalizálja a szöveg kétértelműségét. A példa szavakat, mint például a kerékpár vagy a kerékpár, átalakítják alapszóvá. Alapvetően minden azonos jelentésű, de eltérő ábrázolású szót átalakít az alapalakjává. Csökkenti a szó sűrűségét az adott szövegben, és elősegíti az edzőgép pontos jellemzőinek elkészítését. Tisztább az adat, annál intelligensebb és pontosabb lesz a gépi tanulási modell. A Lemmatizerwill a memóriát és a számítási költségeket is kíméli.

Valós idejű példa a Wordnet Lemmatization és POS Tagging használatáról a Pythonban

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)

Kód Magyarázat

  • Először a korpuszolvasó szóhálózatát importálják.
  • A WordNetLemmatizer a Wordnetből importálódik
  • A Word tokenize, valamint a beszédcímke egyes részei importálva vannak az nltk-ból
  • Az alapértelmezett szótár gyűjteményekből importálódik
  • A szótár létrehozása ott történik, ahol a pos_tag (első betű) azok a kulcsértékek, amelyek értékei a wordnet szótár értékével vannak leképezve. Mi vettük az egyetlen első betűt, mivel később felhasználjuk a ciklusban.
  • A szöveg írva van és tokenizált.
  • Létrejön a lemma_function objektum, amelyet a hurok belsejében fognak használni
  • A hurok lefut, és a lemmatize két argumentumot vesz fel, az egyik a token, a másik pedig a pos_tag hozzárendelése wordnet értékkel.

Kimenet:

guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .

A Lemmatization szoros kapcsolatban áll a wordnet szótárral, ezért elengedhetetlen a téma tanulmányozása, ezért ezt tartjuk a következő témakörként