Kök Oluşturma ve Lemmatizasyon

Stemming nedir?

Stemming, kelimelerin üzerindeki ekleri kaldırarak temel formunu çıkarmak için kullanılan bir tekniktir. Tıpkı bir ağacın dallarını saplarına kadar kesmek gibidir. Örneğin, kelimelerin köküeating, eats, eaten dır-dir eat.

Arama motorları kelimeleri indekslemek için kök ayırmayı kullanır. Bu nedenle, bir arama motoru bir kelimenin tüm biçimlerini depolamak yerine, yalnızca kökleri depolayabilir. Bu şekilde, kök oluşturma dizinin boyutunu azaltır ve alma doğruluğunu artırır.

Çeşitli Stemming algoritmaları

NLTK'da, stemmerI, sahip olan stem()yöntem, arayüz, daha sonra ele alacağımız tüm saplayıcılara sahiptir. Bunu aşağıdaki diyagramla anlayalım

Porter kök belirleme algoritması

Temel olarak İngilizce kelimelerin iyi bilinen soneklerini kaldırmak ve değiştirmek için tasarlanmış en yaygın kök belirleme algoritmalarından biridir.

PorterStemmer sınıfı

NLTK, PorterStemmerkullanarak kolayca Porter Stemmer algoritmalarını uygulayabileceğimiz bir sınıf. Bu sınıf, giriş kelimesini son bir köke dönüştürebileceği birkaç normal kelime formunu ve son ekini bilir. Ortaya çıkan kök, genellikle aynı kök anlamına sahip daha kısa bir kelimedir. Bir örnek görelim -

İlk olarak, doğal dil araç setini (nltk) içe aktarmamız gerekiyor.

import nltk

Şimdi, PorterStemmer Porter Stemmer algoritmasını uygulamak için sınıf.

from nltk.stem import PorterStemmer

Ardından, aşağıdaki gibi bir Porter Stemmer sınıfı örneği oluşturun -

word_stemmer = PorterStemmer()

Şimdi, kökten çıkarmak istediğiniz kelimeyi girin.

word_stemmer.stem('writing')

Çıktı

'write'
word_stemmer.stem('eating')

Çıktı

'eat'

Eksiksiz uygulama örneği

import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('writing')

Çıktı

'write'

Lancaster kök belirleme algoritması

Lancaster Üniversitesi'nde geliştirilmiştir ve çok yaygın bir başka kök belirleme algoritmasıdır.

LancasterStemmer sınıfı

NLTK, LancasterStemmeryardımıyla kolayca köklenmesini istediğimiz kelime için Lancaster Stemmer algoritmalarını uygulayabileceğimiz bir sınıf. Bir örnek görelim -

İlk olarak, doğal dil araç setini (nltk) içe aktarmamız gerekiyor.

import nltk

Şimdi, LancasterStemmer Lancaster Stemmer algoritmasını uygulamak için sınıf

from nltk.stem import LancasterStemmer

Ardından, bir örnek oluşturun LancasterStemmer aşağıdaki gibi sınıf -

Lanc_stemmer = LancasterStemmer()

Şimdi, kökten çıkarmak istediğiniz kelimeyi girin.

Lanc_stemmer.stem('eats')

Çıktı

'eat'

Eksiksiz uygulama örneği

import nltk
from nltk.stem import LancatserStemmer
Lanc_stemmer = LancasterStemmer()
Lanc_stemmer.stem('eats')

Çıktı

'eat'

Normal İfade türetme algoritması

Bu kök belirleme algoritmasının yardımıyla kendi kök oluşturucumuzu oluşturabiliriz.

RegexpStemmer sınıfı

NLTK, RegexpStemmerDüzenli İfade Stemmer algoritmalarını kolayca uygulayabileceğimiz bir sınıf. Temelde tek bir normal ifade alır ve ifadeyle eşleşen tüm önek veya son ekleri kaldırır. Bir örnek görelim -

İlk olarak, doğal dil araç setini (nltk) içe aktarmamız gerekiyor.

import nltk

Şimdi, RegexpStemmer Normal İfade Stemmer algoritmasını uygulamak için sınıf.

from nltk.stem import RegexpStemmer

Ardından, bir örnek oluşturun RegexpStemmer sınıf ve aşağıdaki gibi sözcükten kaldırmak istediğiniz son eki veya öneki sağlar -

Reg_stemmer = RegexpStemmer(‘ing’)

Şimdi, kökten çıkarmak istediğiniz kelimeyi girin.

Reg_stemmer.stem('eating')

Çıktı

'eat'
Reg_stemmer.stem('ingeat')

Çıktı

'eat'
Reg_stemmer.stem('eats')

Çıktı

'eat'

Eksiksiz uygulama örneği

import nltk
from nltk.stem import RegexpStemmer
Reg_stemmer = RegexpStemmer()
Reg_stemmer.stem('ingeat')

Çıktı

'eat'

Kartopu kök belirleme algoritması

Bir başka çok kullanışlı kök bulma algoritmasıdır.

SnowballStemmer sınıfı

NLTK, SnowballStemmerSnowball Stemmer algoritmalarını kolayca uygulayabileceğimiz bir sınıf. İngilizce olmayan 15 dili destekler. Bu buharlaştırma sınıfını kullanmak için, kullandığımız dilin adıyla bir örnek oluşturmamız ve ardından stem () yöntemini çağırmamız gerekir. Bir örnek görelim -

İlk olarak, doğal dil araç setini (nltk) içe aktarmamız gerekiyor.

import nltk

Şimdi, SnowballStemmer Snowball Stemmer algoritmasını uygulamak için sınıf

from nltk.stem import SnowballStemmer

Desteklediği dilleri görelim -

SnowballStemmer.languages

Çıktı

(
   'arabic',
   'danish',
   'dutch',
   'english',
   'finnish',
   'french',
   'german',
   'hungarian',
   'italian',
   'norwegian',
   'porter',
   'portuguese',
   'romanian',
   'russian',
   'spanish',
   'swedish'
)

Ardından, kullanmak istediğiniz dille bir SnowballStemmer sınıfı örneği oluşturun. Burada, 'Fransız' dili için kök oluşturucuyu yaratıyoruz.

French_stemmer = SnowballStemmer(‘french’)

Şimdi, stem () yöntemini çağırın ve kök yapmak istediğiniz sözcüğü girin.

French_stemmer.stem (‘Bonjoura’)

Çıktı

'bonjour'

Eksiksiz uygulama örneği

import nltk
from nltk.stem import SnowballStemmer
French_stemmer = SnowballStemmer(‘french’)
French_stemmer.stem (‘Bonjoura’)

Çıktı

'bonjour'

Lemmatizasyon nedir?

Lemmatizasyon tekniği köklendirme gibidir. Tanımlamadan sonra elde edeceğimiz çıktı, kök oluşturmanın çıktısı olan kök kökten ziyade kök sözcük olan 'lemma' olarak adlandırılır. Haramlaştırmadan sonra, aynı anlama gelen geçerli bir kelime alacağız.

NLTK sağlar WordNetLemmatizer etrafında ince bir paket olan sınıf wordnetkülliyat. Bu sınıf kullanırmorphy() işlevi WordNet CorpusReaderbir lemma bulmak için sınıf. Bunu bir örnekle anlayalım -

Misal

İlk olarak, doğal dil araç setini (nltk) içe aktarmamız gerekiyor.

import nltk

Şimdi, WordNetLemmatizer lematizasyon tekniğini uygulamak için sınıf.

from nltk.stem import WordNetLemmatizer

Ardından, bir örnek oluşturun WordNetLemmatizer sınıf.

lemmatizer = WordNetLemmatizer()

Şimdi, lemmatize () yöntemini çağırın ve lemmayı bulmak istediğiniz sözcüğü girin.

lemmatizer.lemmatize('eating')

Çıktı

'eating'
lemmatizer.lemmatize('books')

Çıktı

'book'

Eksiksiz uygulama örneği

import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('books')

Çıktı

'book'

Kök Oluşturma ve Lemmatizasyon Arasındaki Fark

Aşağıdaki örnek yardımıyla Stemming ve Lemmatization arasındaki farkı anlayalım -

import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')

Çıktı

believ
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(' believes ')

Çıktı

believ

Her iki programın da çıktısı, kökten türetme ve lemmatizasyon arasındaki temel farkı anlatır. PorterStemmersınıf, kelimedeki 'es'leri keser. Diğer yandan,WordNetLemmatizerclass geçerli bir kelime bulur. Basit bir deyişle, kök türetme tekniği yalnızca sözcüğün biçimine bakarken, işaretleme tekniği sözcüğün anlamına bakar. Demek ki, lemmatizasyon uyguladıktan sonra, her zaman geçerli bir kelime alacağız.