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