Merhaba! Bu yazımızda doğal dil işleme alanında tokenize etme(tokenization), gövdeleme(lemmatization) ve kök bulma(stemming) konularını ele alacağız. Günümüzde her bir dilin kendine ait ait dil kuralları, kelime yapısı, kelime özellikleri vb. vardır. Doğal dil işleme alanına her bir kelimenin bütün bir yapı olarak ele alınabilmesi, kök ve gövdelerinin elde edilmesi, bulundurduğu yapım eki veya çekim eklerinin incelenmesi gerekmektedir. Bilgisayarlar doğrudan kelimeleri işleyemez. Her bir kelimeyi işleyebilmesi için daha basit yapılara bölmesi ve onları belirli matematiksel kurallar ile işlemesi gerekmektedir. İnsan gibi makinelerin düşünmesi gerekmektedir ve bu alanda geleneksel yöntemler ile yeni nesil yapay zeka algoritmaları gerekmektedir. Bir insan kelimenin bütün yapısını algılar, kelimenin eklerini ve türlerini, kelimenin gövdesini ve kökünü algılar. Ayrıca her bir derine doğru gidişte daha iyi anlamlar çıkartmaktadır. Her bir detay bir cümlenin ve veya paragrafın anlam yapısını etkilemektedir. Ayrıca bilgisayarlar ise insan beyninin bu özelliklerine göre hazırlanan yapay zeka modelleri sayesinde işlemleri gerçekleştirmektedir.
Token Nedir?
Bir metin içinde bulunan işlenmemiş ve saf halde bulunan veridir. Cümleler, kelimeler, noktalama işaretleri,sayılar, semboller vb. yer almaktadır ve bu yapılara bölünmüş verilerdir. Metin içindeki bu yapılara göre bir token bir cümle bütününden , kelimenin kendisinden veya diğer yapıların birlikte ilişki kurmasına göre değişebilir. Ayrıca NLP işlemlerinde temel olarak kullanırlar ve bir metin içindeki dilbilgisi özelliklerini de yansıtırlar.
Tokenization Nedir?
Tokenlara ayırmak anlamına gelmektedir. Bir cümle içindeki her bir kelime veya paragraf içindeki her bir cümle token olabilmektedir. Genel olarak bütün bir metni tokenlara ayırmak olarak bilinir ve asıl amacı bunu sağlamaktadır. Bir token içinde kelimenin yanı sıra boşluk, noktalama işareti ve özel karakterlerde bulunur. Birden fazla tokenization işlemi bulunmaktadır.
Kelime tokenization - Sentence Tokenization - : Metindeki her bir kelimeyi ayrı ayrı olarak bölmektedir ve en çok kullanılan yöntemdir. Örnek olarak "Ben buraya geldim." cümlesinde sırası ile Ben,buraya,geldim kelimeleri ile "."nokta işareti bir token olarak ele alınabilir.
import nltk
metin = "Bu bir örnek metindir."
kelimeler = nltk.word_tokenize(metin)
print(kelimeler)
Çıkış:
['Bu', 'bir', 'örnek', 'metindir', '.']
Cümle tokenization - World Tokenization - : Bir metin içindeki cümleleri ayrı ayrı olarak ayırmak için kullanılmaktadır. Örnek olarak "Ben buraya geldim ama sen orada kaldın. Neden gelmedin?" metni içinde sırası ile "Ben buraya geldim ama sen orada kaldın" ile "Neden gelmedin" bir tokendır ayrıca "." nokta işaretine göre ayrılmıştır.
import nltk
metin = "Bu bir örnek metindir. Birden fazla cümleden oluşmaktadır. Her cümleyi ayrı ayrı işleyebilmek için cümle tokenizasyonu kullanabiliriz."
cumleler = nltk.sent_tokenize(metin)
print(cumleler)
Çıkış:
['Bu bir örnek metindir.', 'Birden fazla cümleden oluşmaktadır.', 'Her cümleyi ayrı ayrı işleyebilmek için cümle tokenizasyonu kullanabiliriz.']
Karakter tokenization - Charachter Tokenization - : Bir bir metindeki her bir karakteri ayrı ayrı olarak tokenize etme işlemidir. Örnek olarak "Denizhan" kelimesinde ise D,e,n,i,z,h,a,n karakterleri her biri token olmaktadır.
import nltk
metin = "Bu bir örnek metindir."
karakterler = nltk.word_tokenize(metin, preserve_case=True)
print(karakterler)
Çıkış:
['B', 'u', ' ', 'b', 'i', 'r', ' ', 'ö', 'r', 'n', 'e', 'k', ' ', 'm', 'e', 't', 'i', 'n', 'd', 'i', 'r', '.', ' ']
Gövdeleme(Lemmatization) - Baş Sözcük Bulma
Bir kelimenin çekim eklerinden ayrı olarak ele alınmasını sağlamaktadır. Bir kelimenin çoğul ekleri, durum ekleri vb. burada kelimeden ayrışmaktadır. Bir kelimenin gövde halinde olması hedeflenmektedir, ayrıca bu gövde kelimenin baş sözcüğü olarak adlandırılabilir. Örnek olarak bir "Çiçeklikler" kelimesinin birden fazla çiçeklik belirttiğini anlarız. Eğer çoğul eki olan "-ler" ekini kaldırırsak "çiçeklik" kelimesi başsözcük(gövde) olarak tespit etmiş oluruz.
import nltk
from nltk.stem import PorterStemmer
metin = "Arabaları yıkadık, boyadık."
kelimeler = nltk.word_tokenize(metin)
govdeler = []
stemmer = PorterStemmer()
for kelime in kelimeler:
govde = stemmer.stem(kelime)
govdeler.append(govde)
print("Orjinal Metin:", metin)
print("Gövdeler:", govdeler)
Çıkış:
Orjinal Metin: Arabaları yıkadık, boyadık.
Gövdeler: ['arab', 'yık', 'boy', 'dik']
Kök Bulma(Stemming) Nedir?
Stemming, bir kelimenin hiçbir ek olmadan, özellikle yapım eki olmadan saf olarak tespit edilmiş halidir. Saf olarak bulunur, başka bir kelimenin durumunu(durum ekleri olmadan) veya türetilmiş özelliğini(yapım ekleri olmadan) belirtmez. Örnek olarak "Çiçeklikler" kelimesinde "-ler" çoğul eki, "-lik" ise bir yapım ekidir. Geriye kalan "çiçek" ise saf ve daha küçük bir parçaya bölünemeyen bir kelimedir ve kök durumda bulunmaktadır.