Doğal Dil İşleme (NLP) - Metinleri Vektörleştirme

CountVectorizer

Yayın tarihi :06-Şub-22
Bölüm kodlarını ve/veya veri setlerini indir.

Bilgisayarlar metin verisinin ne anlama geldiğini anlayamazlar bunun için metin verilerinin sayısal değerlere dönüştürülmesi gerekmektedir. Python'da kullanılabilecek, metin verilerini sayısal değerlere dönüştüren en önemli uygulamalardan birisi scikit-learn kitaplığı tarafından sağlanan "CountVectorizer"dır.

CountVectorizer ile metin verisi içersinde bulunan kelimeleri birer sütun haline dönüşür ve metin verisi içersinde geçen aynı kelimelerin sayısını sütunun değerine eşitler. 

Kullanabilmek için "CountVectorizer" modülünün içe aktarılması gerekmektedir.

from sklearn.feature_extraction.text import CountVectorizer

Söz dizimi: CountVectorizer(*, input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, stop_words=None, token_pattern='(?u)\b\w\w+\b', ngram_range=(1, 1), analyzer='word', max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=<class 'numpy.int64'>)

  • input, veri giriş türünü temsil eder. 3 farklı değer alabilir: "file","filename","content". Varsayılan olarak "content"dir.
    • file, veriler bir dosya üzerinden okunacaksa kullanılır.
    • filename, veriler birçok dosyadan birleşiyorsa dosya adlarının listesini temsil eder.
    • content, veriler string bir şekilde verildiğinde kullanılır.
  • lowercase, verilerin tamamını küçük harfe çevirir.
  • stop_words, veri setinde gereksiz kelimelerin(ama, fakat, lakin.. gibi) listesini temsil eder.
  • ngram_range, kelimeleri kendi içinde gruplamak için kullanılır. Varsayılan olarak (1,1)'dir(sadece kelimenin kendisi) ama eğer (1,2) seçilirse yanyana iki kelime işleme alınır. Örneğin "sit" oturmak "tight" sıkı anlamına gelirken "sit tight" kımıldamamak anlamına gelir. Eğer ngram_range=(1,1) seçilirse sit ve tight ayrı ayrı işleme alınırken, ngram_range(1,2) seçilirse "sit tight" olarak işleme alınır.

Örnekler üzerinden konu anlatımına devam edelim.

#İlgili kütüphaneler yüklenir.
import pandas as pd
import warnings
warnings.filterwarnings("ignore")

from sklearn.feature_extraction.text import CountVectorizer
#Metin verisini değişkene atayalım.
text=["Bugün hava güneşli ama yarın hava yağmurlu olacakmış."]

#CountVectorizer tanımlaması yapılır.
vect=CountVectorizer()

#text verisine vektörel dönüşüm uygulayalım
vect.fit_transform(text).toarray()

Çıktı:

array([[1, 1, 1, 2, 1, 1, 1]], dtype=int64)

Yukarıdaki çıktı tam olarak anlaşılmadığı için, çıktıyı pandas dataframe oluşturarak gözlemleyelim.

#Metin verisini değişkene atayalım.
text=["Bugün hava güneşli ama yarın hava yağmurlu olacakmış."]

#CountVectorizer tanımlaması yapılır.
vect=CountVectorizer()

#text verisine vektörel dönüşüm uygulayalım
data=vect.fit_transform(text).toarray()

#DataFrame'de verileri gösterme işlemi
#get_feature_names() kelime isimlerini listeler
pd.DataFrame(data=data,columns=vect.get_feature_names())

Çıktı:

"Bugün hava güneşli ama yarın hava yağmurlu olacakmış." cümlesinde hava kelimesi 2 kere geçtiğinden dolayı 2 değerini almış, diğer kelimeler de 1 değerlerini almıştır.

Şimdi de "ngram_range" değerini (1,2) yaparak gözlemleyelim.

#Metin verisini değişkene atayalım.
text=["Bugün hava güneşli ama yarın hava yağmurlu olacakmış."]

#CountVectorizer tanımlaması yapılır.
vect=CountVectorizer(ngram_range=(1,2))

#text verisine vektörel dönüşüm uygulayalım
data=vect.fit_transform(text).toarray()

#DataFrame'de verileri gösterme işlemi
#get_feature_names() kelime isimlerini listeler
pd.DataFrame(data=data,columns=vect.get_feature_names())

Çıktı:

Aşağıdaki örnekte de 3 elemanlı bir listeye CountVectorizer uygulayalım.

#Metin verisini değişkene atayalım.
#Değişkenimiz 3 elemanlı bir listedir.
text=["Aba vakti yaba, yaba vakti aba",
      "Abdal ata binince bey oldum sanır, şalgam aşa girince yağ oldum sanır.",
     "Abdal düğününden, çocuk oyunda usanmaz."]

#stop_words kelimeleri belirtelim
from nltk.corpus import stopwords
stopwords_list=stopwords.words("turkish")

#CountVectorizer tanımlaması yapılır.
vect=CountVectorizer(ngram_range=(1,1),stop_words=stopwords_list)

#text verisine vektörel dönüşüm uygulayalım
data=vect.fit_transform(text).toarray()

#DataFrame'de verileri gösterme işlemi
#get_feature_names() kelime isimlerini listeler
pd.DataFrame(data=data,columns=vect.get_feature_names())

Çıktı:

Sonuç olarak CountVectorizer;

  • Metinsel verileri vektörel hale getirir.
  • Her liste elemanı birer sıra oluşturur.
  • Her kelime küçük harfe dönüştürülür.
  • Her benzersiz kelime yeni sütun oluşturur.
  • Her sütun ismi alfabetik olarak sıralanır.
  • Her aynı kelime sayısı ilgili sütunun değeri olur.
  • ngram_range değeri (1,1) iken sadece kelimenin kendisini oluştururken, (1,2) değeri hem kendisi hem de yanındaki kelime ile birleşerek oluşturur.
Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.