Köklenme ve Lemmatizasyon Python Örneklerle NLTK

Köklenme ve Lemmatizasyon Nedir? Python NLTK'mi?

Köklenme ve Lemmatizasyon in Python NLTK, Doğal Dil İşleme için metin normalleştirme teknikleridir. Bu teknikler, metin ön işleme için yaygın olarak kullanılır. Köklendirme ve lemmatizasyon arasındaki fark, köklendirmenin bağlamı bilmeden kelimeleri kestiği için daha hızlı olması, lemmatizasyonun ise işlemeden önce kelimelerin bağlamını bildiği için daha yavaş olmasıdır.

Köklenme Nedir?

Ruh hali kelimelerin normalleştirilmesine yönelik bir yöntemdir Doğal Dil İşleme. Bir cümledeki bir dizi kelimeyi aramayı kısaltmak için bir diziye dönüştüren bir tekniktir. Bu yöntemde aynı anlama gelen ancak bağlama veya cümleye göre bazı farklılıklar gösteren kelimeler normalleştirilir.

Başka bir deyişle, bir kelimenin kökü vardır ancak aynı kelimenin birçok varyasyonu vardır. Örneğin kökü “ye” olan kelimenin varyasyonları “yemek, yemek, yemiş ve benzeri” şeklindedir. Aynı şekilde Stemming in yardımıyla Python, herhangi bir varyasyonun kök kelimesini bulabiliriz.

Örneğin

He was riding.	
He was taking the ride.

Yukarıdaki iki cümlede anlam aynıdır, yani geçmişteki binicilik faaliyeti. Her iki mananın da aynı olduğunu insan rahatlıkla anlayabilir. Ancak makineler için her iki cümle de farklıdır. Böylece onu aynı veri satırına dönüştürmek zorlaştı. Aynı veri setini sağlamadığımız takdirde makine tahminde bulunamaz. Bu nedenle veri setini makine öğrenimine hazırlamak için her kelimenin anlamını farklılaştırmak gerekir. Burada da kök çıkarma, aynı türdeki verileri kök sözcüğü alınarak kategorize etmek için kullanılıyor.

Bunu bir ile uygulayalım Python program.NLTK'nın “PorterStemmer” adında bir algoritması vardır. Bu algoritma, simgeleştirilmiş sözcük listesini kabul eder ve onu kök sözcük haline getirir.

Köklendirmeyi anlama programı

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

Çıktı:

wait	
wait	
wait	
wait 

Köklendirmeyi Anlama Programı

Kod Açıklaması:

  • NLTk'de içe aktarılan bir kök modül var. Modülün tamamını içe aktarırsanız program binlerce satır kod içerdiğinden ağırlaşır. Yani kök modülün tamamından yalnızca “PorterStemmer”i içe aktardık.
  • Aynı kelimenin varyasyon verilerinin kukla bir listesini hazırladık.
  • nltk.stem.porter.PorterStemmer sınıfına ait bir nesne oluşturulur.
  • Daha sonra “for” döngüsünü kullanarak PorterStemmer’e tek tek aktardık. Son olarak listede adı geçen her kelimenin kök kelimesinin çıktısını aldık.

Yukarıdaki açıklamadan, kök çıkarmanın, verilerdeki fazlalıkları ve aynı kelimedeki farklılıkları ortadan kaldırdığı için önemli bir ön işleme adımı olarak kabul edildiği sonucuna varılabilir. Sonuç olarak veriler filtrelenir ve bu da daha iyi makine eğitimine yardımcı olur.

Şimdi tam bir cümleyi geçiyoruz ve onun çıktı olarak davranışını kontrol ediyoruz.

Programı:

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)

Çıktı:

hello	
guru99	
,	
you	
have	
build	
a	
veri	
good	
site	
and	
I	
love	
visit	
your	
site	 

Köklendirmeyi Anlama Programı

Kod Açıklaması:

  • PorterStemer paketi modül gövdesinden içe aktarılmıştır
  • Kelimelerin yanı sıra cümlenin tokenizasyonuna yönelik paketler içe aktarılır
  • Bir sonraki adımda belirtilecek olan bir cümle yazılır.
  • Lemmatizasyondan kaynaklanan kelime tokenizasyonu bu adımda uygulanır.
  • PorterStemmer için bir nesne burada oluşturulur.
  • Döngü çalıştırılır ve her kelimenin köklenmesi kod satırı 5'te oluşturulan nesne kullanılarak yapılır.

Sonuç:

Stemming bir veri ön işleme modülüdür. İngilizce dilinde tek bir kelimenin birçok varyasyonu vardır. Bu farklılıklar makine öğrenimi eğitiminde ve tahmininde belirsizlik yaratır. Başarılı bir model oluşturmak için bu tür kelimeleri filtrelemek ve kökten ayırma kullanarak aynı türdeki sıralı verilere dönüştürmek hayati önem taşımaktadır. Ayrıca bu, bir cümle kümesinden satır verileri elde etmek ve normalleştirme olarak da bilinen gereksiz verileri kaldırmak için önemli bir tekniktir.

Lemmatizasyon nedir?

Lemmatizasyon NLTK'de, bir kelimenin anlamına ve bağlamına bağlı olarak lemmayı bulmanın algoritmik sürecidir. Lemmatizasyon genellikle çekim eklerini kaldırmayı amaçlayan kelimelerin morfolojik analizini ifade eder. Lemma olarak bilinen bir kelimenin temel veya sözlük biçimini döndürmeye yardımcı olur.

NLTK Lemmatizasyon yöntemi, WorldNet'in yerleşik morf işlevine dayanmaktadır. Metin ön işleme hem kök çıkarma hem de lemmatizasyon işlemlerini içerir. Birçok kişi bu iki terimi kafa karıştırıcı buluyor. Bazıları bunları aynı şekilde ele alıyor, ancak kökten alma ile lemmatizasyon arasında bir fark var. Aşağıdaki nedenden dolayı Lemmatizasyon birinciye tercih edilir.

Lemmatizasyon neden Köklenmeden daha iyidir?

Kökten çıkarma algoritması, kelimedeki son ekin kesilmesiyle çalışır. Daha geniş anlamda kelimenin başını veya sonunu keser.

Aksine Lemmatizasyon daha güçlü bir işlemdir ve kelimelerin morfolojik analizini dikkate alır. Tüm çekim biçimlerinin temel biçimi olan lemmayı döndürür. Sözlük oluşturmak ve kelimenin uygun biçimini aramak için derinlemesine dil bilgisi gereklidir. Kökten ayırma genel bir işlemdir, lemmatizasyon ise sözlükte uygun formun aranacağı akıllı bir işlemdir. Bu nedenle, lemmatizasyon daha iyi biçimlendirmeye yardımcı olur makine öğrenme özellikleri.

Lemmatizasyon ve Köklenme arasındaki farkı ayırt edecek kod

Kaynak Kodu:

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

Çıktı::

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Lemmatizasyon Kodu:

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

Çıktı:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Çıktı Tartışması

Çalışmalar ve çalışma için köklere bakarsanız, çıktı aynıdır (studi) ancak NLTK lemmatizer, hem çalışmalar için çalışma hem de çalışma için çalışma için farklı lemma sağlar. Yani makineyi eğitmek için özellik seti yapmamız gerektiğinde, lemmatizasyon tercih edilirse harika olur.

Lemmatizer Kullanım Örneği

Lemmatizer metin belirsizliğini en aza indirir. Bisiklet veya bisiklet gibi örnek kelimeler bisiklet temel kelimesine dönüştürülür. Temel olarak, aynı anlama sahip ancak farklı gösterime sahip tüm kelimeleri temel biçimlerine dönüştürecektir. Verilen metindeki kelime yoğunluğunu azaltır ve eğitim makinesi için doğru özelliklerin hazırlanmasına yardımcı olur. Veriler ne kadar temiz olursa makine öğrenimi modeliniz o kadar akıllı ve doğru olur. NLTK Lemmatizer ayrıca bellekten ve hesaplama maliyetinden de tasarruf sağlayacaktır.

Wordnet Lemmatization ve POS Etiketlemenin kullanımını gösteren Gerçek Zamanlı örnek 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)

Lemmatizer Kullanım Örneği

Kod Açıklama

  • İlk olarak, derlem okuyucu wordnet'i içe aktarılır.
  • WordNetLemmatizer wordnet'ten içe aktarılmıştır.
  • Kelime simgeleştirmenin yanı sıra konuşma etiketinin bazı kısımları da nltk'den içe aktarılır.
  • Varsayılan Sözlük koleksiyonlardan içe aktarılır.
  • Pos_tag'in (ilk harf) değerleri wordnet sözlüğünden gelen değerle eşleştirilen anahtar değerler olduğu sözlük oluşturulur. Döngüde daha sonra kullanacağımız için tek ilk harfi aldık.
  • Metin yazılır ve simgeleştirilir.
  • Döngü içinde kullanılacak nesne lemma_function oluşturulur.
  • Döngü çalıştırılır ve lemmatize iki argüman alır; biri token, diğeri ise pos_tag'in wordnet değeriyle eşleştirilmesidir.

Çıktı:

guru99 => guru99				
is => be				
totally => totally				
new => new				
kind => kind				
of => of				
learning => learn				
experience => experience				
. => .				 

Python Lemmatizasyon ile yakın bir ilişkisi vardır. kelime ağı sözlüğü, bu yüzden bu konuyu incelemek çok önemli, bu yüzden bunu bir sonraki konu olarak tutuyoruz.