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.