Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Stemmaus | Osio
Practice
Projects
Quizzes & Challenges
Visat
Challenges
/
Luonnollisen Kielen Käsittely

bookStemmaus

Pyyhkäise näyttääksesi valikon

Note
Määritelmä

Stemmaus on tekstin normalisointitekniikka, jota käytetään NLP:ssä taivutettujen sanojen kantamuodon löytämiseen.

Tarkemmin sanottuna stemmaus tarkoittaa affiksien (yleensä vain suffiksien) poistamista sanoista niiden kantamuodon, eli stemmin, saamiseksi. Esimerkiksi sanojen "running", "runs" ja "run" kantamuoto on "run".

Stemmauksen tarkoituksena on yksinkertaistaa analyysiä käsittelemällä samankaltaisia sanoja yhtenä kokonaisuutena, mikä parantaa tehokkuutta erilaisissa NLP-tehtävissä.

Stemmaus NLTK:lla

NLTK tarjoaa useita stemmausalgoritmeja, joista suosituimpia ovat Porter Stemmer ja Lancaster Stemmer. Nämä algoritmit käyttävät erityisiä sääntöjä affiksien poistamiseen ja sanan kantamuodon löytämiseen.

Kaikilla NLTK:n stemmausluokilla on yhteinen rajapinta. Ensin täytyy luoda instanssi stemmausluokasta ja käyttää sen stem()-metodia jokaiselle tokenille.

1234567891011121314151617181920212223242526272829
import nltk from nltk.stem import PorterStemmer, LancasterStemmer from nltk.tokenize import word_tokenize from nltk.corpus import stopwords nltk.download('punkt_tab') nltk.download('stopwords') stop_words = set(stopwords.words('english')) # Create a Porter Stemmer instance porter_stemmer = PorterStemmer() # Create a Lancaster Stemmer instance lancaster_stemmer = LancasterStemmer() text = "Stemming is an essential technique for natural language processing." text = text.lower() tokens = word_tokenize(text) # Filter out the stop words tokens = [token for token in tokens if token.lower() not in stop_words] # Apply stemming to each token porter_stemmed_tokens = [porter_stemmer.stem(token) for token in tokens] lancaster_stemmed_tokens = [lancaster_stemmer.stem(token) for token in tokens] # Display the results print("Original Tokens:", tokens) print("Stemmed Tokens (Porter Stemmer):", porter_stemmed_tokens) print("Stemmed Tokens (Lancaster Stemmer):", lancaster_stemmed_tokens)
copy

Ensin suoritettiin tokenisointi, sitten suodatettiin pois stop-sanat ja lopuksi käytettiin stemmausta tokeneihin hyödyntäen list comprehension -rakennetta. Tuloksista puhuttaessa nämä kaksi stemmeriä tuottivat melko erilaisia tuloksia. Tämä johtuu siitä, että Lancaster Stemmer sisältää noin kaksi kertaa enemmän sääntöjä kuin Porter Stemmer ja on yksi "aggressiivisimmista" stemmereistä.

Note
Huomio

Kaiken kaikkiaan Porter Stemmer on suosituin vaihtoehto, joka tuottaa merkityksellisempiä tuloksia kuin Lancaster Stemmer, joka usein yleistää sanoja liikaa.

question mark

Mitkä seuraavista väittämistä Porter- ja Lancaster-stemmaajista pitävät paikkansa?

Select all correct answers

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 10

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 1. Luku 10
some-alt