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.

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.
