Köklenme ve Lemmatizasyon Python Örneklerle NLTK

⚡ Akıllı Özet

Kök bulma ve lemmatizasyon, metin normalleştirme teknikleridir. Python NLTK, kelime varyasyonlarını ortak bir temele indirger; burada kök bulma işlemi bağlamdan bağımsız olarak ekleri hızla ayıklar ve lemmatizasyon, anlamı kullanarak gerçek bir sözlük kelimesi döndürür.

  • 🌱 saplama: PorterStemmer, gerçek bir kelime olmayabilecek bir köke ulaşmak için ekleri kırpıyor.
  • 📚 Lemmatizasyon: WordNetLemmatizer, sözlükteki temel biçimi, yani lemmayı döndürür.
  • 🇧🇷 Fark: Kök bulma daha hızlıdır, lemmatizasyon ise daha yavaş ancak daha doğru ve bağlamı daha iyi anlayan bir yöntemdir.
  • 🔤 normalleştirme: Her ikisi de kelime yoğunluğunu azaltarak makinelerin varyantları tek bir özellik olarak ele almasını sağlar.
  • ???? ️ POS Etiketleri: Sözcük türü etiketini geçmek, kök bulma işlemini çok daha hassas hale getirir.
  • 🤖 Yapay Zekanın Faydaları: Daha temiz ve normalleştirilmiş metin, daha güçlü makine öğrenimi özellikleri ve modelleri üretir.

Köklenme ve Lemmatizasyon Python 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şlemede yaygın olarak kullanılır. Kök bulma (stemming) ve lemmatizasyon (lemmatization) arasındaki fark, kök bulmanın kelimeleri bağlamı bilmeden kestiği için daha hızlı olması, lemmatizasyonun ise kelimelerin bağlamını işlemden önce bildiği için daha yavaş olmasıdır.

Köklenme Nedir?

Ruh hali kelimeleri normalleştirme yöntemidir. Doğal Dil İşlemeBu, bir cümledeki kelime gruplarının aramayı kısaltmak için bir diziye dönüştürüldüğü bir tekniktir. Bu yöntemde, aynı anlama gelen ancak bağlama veya cümleye göre bazı varyasyonları olan kelimeler normalleştirilir. Başka bir deyişle, bir kök kelime vardır, ancak aynı kelimenin birçok varyasyonu vardır. Örneğin, kök kelime "yemek"tir ve varyasyonları "yer, yemek, yenmiş" vb.dir. Aynı şekilde, Kök Bulma (Stemming) yardımıyla PythonBu sayede her 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şte yapılan bir binicilik etkinliği. İnsanlar her iki anlamın da aynı olduğunu kolayca anlayabilir. Ancak makineler için her iki cümle de farklıdır. Bu nedenle, bunları aynı veri satırına dönüştürmek zorlaşır. Aynı veri setini sağlamazsak, makine tahmin yapamaz. Bu nedenle, makine öğrenimi için veri setini hazırlamak üzere her kelimenin anlamını ayırt etmek gereklidir. Burada, kök kelimeyi alarak aynı türdeki verileri kategorize etmek için kök bulma (stemming) yöntemi kullanılır.

Bunu şu şekilde uygulayalım: Python NLTK programının bir algoritması vardır. PorterStemmerBu algoritma, belirteçlere ayrılmış kelime listesini kabul eder ve bunları kök kelimelere dönüştürür.

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

Code Açıklama:

  • NLTK'de içe aktarılan bir kök modülü bulunmaktadır. Modülün tamamını içe aktarırsanız, program binlerce satır kod içerdiği için ağırlaşır. Bu nedenle, kök modülünün tamamından yalnızca "PorterStemmer"ı 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.
  • Bir "for" döngüsü kullanarak, PorterStemmer'a tek tek ilettik. Sonunda, listede belirtilen her kelimenin kök kelimesini elde ettik.

Yukarıdakilerden de anlaşılacağı gibi, kök bulma (stemming) önemli bir ön işleme adımıdır çünkü aynı kelimedeki tekrarları ve varyasyonları ortadan kaldırır. Sonuç olarak, veriler filtrelenir ve bu da makine eğitimini iyileştirmeye yardımcı olur. Şimdi tam bir cümleyi işleyip çıktısını kontrol edelim.

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

Code Açıklama:

  • PorterStemmer paketi stem modülünden içe aktarılıyor.
  • Cümlelerin ve kelimelerin belirteçlere ayrılması için paketler içe aktarılıyor.
  • Bir sonraki adımda belirtilecek olan bir cümle yazılır.
  • PorterStemmer için bir nesne burada oluşturulur.
  • Bir döngü çalıştırılır ve 5. kod satırında oluşturulan nesne kullanılarak her kelimenin köküne ulaşılır.

Özetle, kök bulma (stemming) bir veri ön işleme modülüdür. İngilizce'de tek bir kelimenin birçok varyasyonu bulunur ve bu da makine öğrenimi eğitiminde ve tahmininde belirsizliğe yol açar. Başarılı bir model oluşturmak için, bu tür kelimeleri kök bulma yöntemiyle aynı sıralı veriye filtrelemek hayati önem taşır. Bu işlem aynı zamanda normalizasyon olarak da bilinir.

Lemmatizasyon nedir?

Lemmatizasyon NLTK'deki kök bulma (lemmatizasyon), bir kelimenin anlamına ve bağlamına bağlı olarak kökünü bulma algoritmik sürecidir. Kök bulma genellikle, çekim eklerini kaldırmayı amaçlayan kelimelerin morfolojik analizini ifade eder. Bir kelimenin kökünü veya sözlük biçimini, yani kökünü döndürmeye yardımcı olur. NLTK Kök Bulma yöntemi, WordNet'in yerleşik morfoloji fonksiyonuna dayanmaktadır. Metin ön işleme hem kök bulmayı hem de kök bulmayı içerir. Birçok kişi bu iki terimi kafa karıştırıcı bulmaktadır. Bazıları bunları aynı şey olarak ele alsa da, kök bulma ve kök bulma arasında bir fark vardır. Kök bulma, aşağıdaki nedenlerden dolayı birincisine tercih edilir.

Lemmatizasyon neden Köklenmeden daha iyidir?

Kök bulma algoritması, kelimenin sonundaki eki keserek ç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 çekimsel biçimlerinin temel biçimi olan lemmayı döndürür. Sözlük oluşturmak ve kelimenin doğru biçimini aramak için derinlemesine dilbilim bilgisi gereklidir. Kök bulma genel bir işlemken, lemmatizasyon doğru biçimin sözlükte arandığı akıllı bir işlemdir. Bu nedenle, lemmatizasyon daha iyi sözlükler oluşturmaya yardımcı olur. makine öğrenme özellikleri.

Code Lemmatizasyon ve Kök Bulma arasında ayrım yapmak

Ruh hali Code:

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 Code:

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ı

"Studies" ve "studying" kelimelerinin köklerini bulmaya çalışırsanız, sonuç aynıdır (studi), ancak NLTK lemmatizer her iki kelime için de farklı bir lemma sağlar: "studies" için "study" ve "studying" için "studying". Dolayısıyla, bir makineyi eğitmek için bir özellik kümesi oluşturmamız gerektiğinde, lemmatizasyonun tercih edilmesi harika olurdu.

Lemmatizer Kullanım Örneği

Lemmatizer, metindeki belirsizliği en aza indirir. Bisiklet veya bisikletler gibi kelimeler temel kelime olan bisiklete dönüştürülür. Aynı anlama gelen ancak farklı gösterime sahip tüm kelimeleri temel biçimlerine dönüştürerek kelime yoğunluğunu ve karmaşıklığını azaltır.ping Makineyi eğitmek için doğru özellikler hazırlayın. Veriler ne kadar temiz olursa, makine öğrenme modeliniz o kadar doğru olur. NLTK Lemmatizer ayrıca bellek ve hesaplama maliyetinden tasarruf sağlar.

WordNet kök sözcük bulma ve sözcük türü etiketleme özelliklerinin gerçek zamanlı kullanımını gösteren ö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)

Çıktı:

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

Code Açıklama:

  • WordNet metin okuyucusu içe aktarıldı ve WordNetLemmatizer, WordNet'ten içe aktarıldı.
  • Kelime tokenizasyonu ve sözcük türü etiketi NLTK'den, Varsayılan Sözlük ise koleksiyonlardan içe aktarılır.
  • pos_tag'ın ilk harfi anahtar olarak kullanılarak, wordnet sözlüğündeki değerlerle eşleştirilen bir sözlük oluşturulur.
  • Metin yazılır ve belirteçlere ayrılır, ardından döngü içinde kullanılmak üzere lemma_function nesnesi oluşturulur.
  • Döngü çalıştırılır ve lemmatize fonksiyonu iki argüman alır: belirteç ve bir harita.ping pos_tag'in wordnet değeriyle eşleştirilmesi.

Python Lemmatizasyonun şunlarla yakın bir ilişkisi vardır: WordNet sözlüğüBu nedenle, bu konuyu bir sonraki aşamada incelemek şarttır.

SSS

Porter kök bulucu, NLTK'nin PorterStemmer sınıfıdır. Sonek kaldırma işlemini uygular.ping Martin Porter'ın 1980 tarihli algoritmasından alınan kurallar, İngilizce kelimeleri köklerine indirgemek için kullanılıyor; bu nedenle "waiting," "waited" ve "waits" kelimelerinin hepsi "wait" oluyor.

Arama dizinleme, büyük ölçekli duygu analizi veya özellik azaltma gibi okunabilirlikten ziyade hız ve basitliğin önemli olduğu durumlarda kök bulma yöntemini kullanın. Çıktının geçerli, insan tarafından okunabilir bir kelime olması gerektiğinde ise kök sözcük bulma yöntemini seçin.

Metin normalizasyonu, bir kelimenin farklı biçimlerini tek bir ortak gösterime dönüştürür. Kök bulma ve lemmatizasyon, kelime yoğunluğunu azaltan ve böylece bir modelin "çalışma" ve "çalışmalar" gibi varyantları tek bir özellik olarak ele almasını sağlayan iki normalizasyon tekniğidir.

NLTK, kök bulma için PorterStemmer'ı (ve Snowball gibi diğer kök bulma algoritmalarını) ve kök sözcük bulma için WordNetLemmatizer'ı sağlar. Kök sözcük bulma algoritması, her kelimenin doğru temel biçimini döndürmek için WordNet sözlüğüne dayanır.

Gereksiz kelime varyasyonlarını ortadan kaldırırlar, böylece makine öğrenimi modeli daha temiz, daha düşük boyutlu özellikler görür. Daha az yinelenen belirteç, eğitim sırasında daha az belirsizlik ve görülmemiş metin üzerinde daha doğru tahminler anlamına gelir.

Modern yapay zeka modelleri bağlamı otomatik olarak çıkarır, ancak NLTK'nin WordNetLemmatizer'ı belirsizliği gidermek için sözcük türü etiketine ihtiyaç duyar. Bu etiketi sağlamak, örneğin "learning" kelimesini fiil olarak etiketlendiğinde "learn" olarak çevirerek doğru kök kelimeyi seçmesini sağlar.

Bir kelime, farklı köklerle hem isim hem de fiil olabilir. Sözcük türü etiketi olmadan, WordNetLemmatizer bunun bir isim olduğunu varsayar. Fiil veya sıfat gibi doğru etiketi geçirmek, doğru temel biçimi verir.

Hayır. Kök bulma işlemi yalnızca ekleri keser, bu nedenle "studies" "studi" ve "cries" "cri" olur ki bunlar geçerli kelimeler değildir. Buna karşılık, kök bulma işlemi her zaman "study" gibi gerçek bir sözlük kelimesi döndürür.

Bu yazıyı şu şekilde özetleyin: