Metin Madenciliği

Metin madenciliği, metin verilerinden anlamlı bilgileri çıkarmak, örüntüleri keşfetmek ve anlamı analiz etmek için kullanılan bir veri madenciliği yöntemidir. Bu, doğal dil işleme (NLP) ve makine öğrenimi tekniklerini içerir ve metin verilerinin analizini kolaylaştırır.

  • Ters dizin: belgelerden oluan veri kümesinde her sözcüğün hangi belgelerde görüldüğü işaretlenir. Büyük veri kümeleri için etkilidir.
  • Terim: sözcükler veya ifadeler.
  • Sözcük dağarcığı: terimlerden oluşan küme. Zincir sıkıştırma, terimlerin yazıldığı zincirlerin boyutlarının küçültme işlemi. Her terim için zincir DID’ye göre sıralanır. DID’ler arasındaki fark saklanır. Küçük sayılar kodlanarak bellekte daha az yer kaplarlar.
  • Vectorizer: metin verilerini doğrudan vektörlere dönüştürür.
  • Transformer: halihazırda vektörleşmiş metin verileri üzerinde işlem uygular.

Analiz Yöntemleri

  • Morfolojik Analiz: Bir dildeki kelimelerin yapısal ve biçimsel özelliklerinin incelenmesidir. Bu analiz, kelimenin kökü, ekler ve diğer dilbilgisel özellikleri gibi unsurları tanımlamayı amaçlar. Morfolojik analiz, kelimeyi kök ve eklerine ayırarak, kelimenin anlamını ve işlevini anlamak için kullanılır.
  • Sentaks Analiz: Bir dildeki cümlelerin yapılarının ve bunların içerisindeki kelime gruplarının rollerinin belirlenmesidir. Bu analiz, bir cümlenin dilbilgisel yapısını inceleyerek, kelime gruplarının nasıl bir araya geldiğini ve cümlenin nasıl yapılandırıldığını anlamayı amaçlar.
  • Anlamsal Analiz: Bir metnin anlamını anlamak ve ve çıkarmak hedeflenir. Kelime seviyesinden cümle seviyesine kadar değişen düzeylerde gerçekleştirilir. Bir metnin içerdiği anlamlı ilişkileri, kavramları ve bağlamları anlamayı amaçlar.
  • Pragmatik Analiz: Bir metindeki dilin gerçek dünyadaki kullanımına odaklanır. Metin içindeki cümlelerin ve ifadelerin anlamlarını belirlerken, onların kullanıldığı bağlamı, niyeti, sosyal etkileşimi ve dilin gerçek dünyadaki işlevini dikkate alır.

Tokenization

Metinlerin kelimelerine, sembollerine veya cümlelerine ayrılmasını sağlar. Bu işlem, metin verilerini daha işlenebilir hale getirir ve makine öğrenimi veya dil işleme modelleri için daha uygun bir formata dönüştürür.

from nltk.tokenize import word_tokenize

cumle = 'Merhaba dunya! NLP harika bir alandir.'
kelimeler = word_tokenize(cumle)
print(kelimeler)

# Output:
# ['Merhaba', 'dunya', '!', 'NLP', 'harika', 'bir', 'alandir', '.']

Stemming

Kelime köklerini bulmayı amaçlar. Kelime kökleri, bir kelimenin çekim ekleri veya ek bilgileri atılarak elde edilen temel kelime formudur. Bu işlem, bir kelimenin farklı varyasyonlarını aynı köke indirgeyerek metinlerdeki veri tutarsızlığını azaltmaya yardımcı olur.

from nltk.stem import PorterStemmer

stemmer = PorterStemmer()

words = ['running', 'ran', 'run']

for word in words:
	stemmed = stemmer.stem(word)
	print(f'{word} -> {stemmed}')

# Output:
# running -> run
# ran -> ran
# run -> run

Lemmatization

Bir kelimeyi gerçek anlamıyla karşılayan ve dilbilgisi kurallarına uygun olan temel veya kök formuna dönüştürmeyi hedefler.

from nltk.stem import WordNetLemmatizer

lemmatizer = WordNetLemmatizer()

words = ['running', 'ran', 'run']

for word in words:
	stemmed = lemmatizer.lemmatize(word)
	print(f'{word} -> {stemmed}')

# Output:
# running -> running
# ran -> ran
# run -> run

Stopwords

Pek anlam taşımayan veya çok sık kullanılan keliemelerdir. Bu kelimeler genellikle dilin yapı taşları olsa da, genel anlam taşımadıkları veya metnin anlamını çok fazla etkilemedikleri için çıkarılabilirler.

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

cumle = "Bu ornek cumlede, analiz icin gereksiz kelimeler bulunmaktadir."
kelimeler = word_tokenize(cumle)
stop_words = set(stopwords.words('turkish'))
temiz_kelimeler = [kelime for kelime in kelimeler if kelime.lower() not in stop_words]
print(temiz_kelimeler)

# Output:
# ['ornek', 'cumlede', ',', 'analiz', 'gereksiz', 'kelimeler', 'bulunmaktadir', '.']

Part-of-Speech (POS) Tagging

Bir cümledeki her kelimenin dilbilgisel kategorisini (isim, sıfat, fiil, zarf) belirleme işlemidir.

import nltk
from nltk.tokenize import word_tokenize

cumle = "the cat jumped out of the tree."
kelimeler = word_tokenize(cumle)
pos_tags = nltk.pos_tag(kelimeler)
print(pos_tags)

# Output:
# [('the', 'DT'),
# ('cat', 'NN'),
# ('jumped', 'VBD'),
# ('out', 'IN'),
# ('of', 'IN'),
# ('the', 'DT'),
# ('tree', 'NN'),
# ('.', '.')]
EtiketAnlamı
Noun (NN)Yer ismi.
Noun Location (NST)Özel isim.
Proper Noun (PPR)Zamir.
Compound Words (XC)Bileşik kelime.
Demonstration (DEM)İşaret sıfatı.
Post Position (PSP)İlgeç.
Conjunets (CC)Bağlaç.
Verb (VM)Fiil.
Adverb (RB)Zarf.
Particles (RP)Edat.
Adjectives (JJ)Sıfat.
Auxiliary Verb (VAUX)Yardımcı fiil.
Negation (NEG)Olumsuzluk işareti.
Quantifiers (QF)Nicelik belirtme sıfatı.
Cardinal (QC)Sayı sıfatı.
Ordinal (QO)Sıra sıfatı.
Question Words (WQ)Soru kelimesi.
Intensifiers (INTF)Kuvvetlendirici.
Interjection (INJ)Ünlem.
Reduplication (RDP)Yinelem.
Unknown Words (UNK)Bilinmeyen kelime.
Symbol (SYM)Sembol.

Named Entity Recognition (NER)

Metindeki önemli bilgi parçalarını (ad, yer, tarih) tanımlamak için kullanılır.

import nltk

cumle = "Bill Gates founded Microsoft and lives in Seattle."
tokens = nltk.word_tokenize(cumle)
pos_tags = nltk.pos_tag(tokens)
ner_tags = nltk.ne_chunk(pos_tags)
print(ner_tags)

# Output:
# (S
#  (PERSON Bill/NNP)
#  (PERSON Gates/NNP)
#  founded/VBD
#  (PERSON Microsoft/NNP)
#  and/CC
#  lives/VBZ
#  in/IN
#  (GPE Seattle/NNP)
#  ./.)

NER Etiketleri

EtiketAçıklama
PERSONİnsan.
NOPRMilliyet, dini veya politik grup.
FACBina, köprü, havaalanı, yol.
ORGŞirket, kurum.
GPEÜlke, şehir.
LOCKonum, yer.
PRODUCTObje, araç, yiyecek.
EVENTSavaş, spor veya doğa olayı.
WORK_OF_ARTKitap, şarkı.
LAWYasalar.
LANGUAGEDil.
DATETarih, dönem.
TIMEBir günden küçük zaman.
PERCENTYüzde.
MONEYPara birimi.
QUANTITYAğırlık, mesafe.
ORDINALSıra belirten sözcükler.
CARDINALDiğer türlere uymayan sayılar.

TF-IDF (Terim Sıkığı – Devrik Belge Sıklığı)

Metin verilerini sayısal vektörlere dönüştürmek için kullanılır. Yüksek boyutlu metin verilerini işlemek için etkili bir araçtır. Nadir görülen terimlerin, özellikle küçük veri setlerinde, model performansına etkisi az olabilir. Stop-word gibi yaygın kelimelerin etkisini azaltır. Metin verilerindeki kelime önemini dikkate alarak vektörler oluşturur. Vektörün boyutunun büyüklüğüne bağlı olarak bellek kullanımı artar.

  • Term Frequency (Terim Frekansı – TF): Bir belgedeki bir terimin kaç kez geçtiğini ölçer. Yüksek TF, bir terimin belgedeki önemini gösterir.
  • Inverse Document Frequency (Ters Belge Frekansı – IDF): Bir terimin tüm belgelerde ne kadar yaygın olduğun ölçer. Yaygın terimlerin genel anlamda daha az önemli olduğunu gösterir.
from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(X_train)
X_test = vectorizer.transform(X_test)

DictVectorizer

Sözlük yapılarından özellik matrisleri oluşturmak için kullanılır. Sözlük yapısındaki her öğeyi bir özellik olarak düşünür. He özellik için benzersiz değerler toplar ve bunları bir özellik matrisini dönüştürür. Özelliklerin her bir değeri için 0 veya 1 gibi ikili bir temsil kullanarak özellik matrisini oluşturur.

from sklearn.feature_extraction import DictVectorizer

dv = DictVectorizer(sparse=False)
test_dict = [{'foo': 1, 'bar': 2}, {'foo': 3, 'baz': 1}]
X = dv.fit_transform(test_dict)

CountVectorizer

Metindeki her bir kelimenin belirli bir belgedeki frekansını içerir. Önişleme adımları uygulanan metindeki her bir kelimenin metindeki frekansı hesaplanır. Bu frekanslar, her bir kelimenin birer özellik olduğu ve metin belgesinin bir vektör olarak temsil edildiği bir matrise dönüştürülür.

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
X_train = vectorizer.fit_transform(X_train)
X_test = vectorizer.transform(X_test)

HashingVectorizer

Bir hash fonksiyonu kullanarak metin verilerini sayısal vektörlere dönüştürür. Bu sayede, sabit boyutta bir vektör elde edilir. Her bir kelimenin bir hash fonksiyonuyla belirli bir boyuttaki bir vektör içindeki konumun belirler. Kelimelerin belirlenen boyuttaki vektördeki konumlarına göre vektör oluşturulur. Hash fonksiyonları çakışma (collision) problemine neden olabilir yani farklı kelimeler aynı hash değerine sahip olabilir. Kullanılan hash fonksiyonu geri dönüşümlü olmadığı için vektörden kelimeye dönüş yapmak zordur.

from sklearn.feature_extraction.text import HashingVectorizer

vectorizer = HashingVectorizer()
X_train = vectorizer.fit_transform(X_train)
X_test = vectorizer.transform(X_test)