Öne çıkan

R’da Duygu Analizi Üzerine Vaka Çalışmaları: Case Studies on Sentiment Analysis in R

Giriş

Genel olarak pozitif, negatif  ve nötr dilin ölçümü anlamına gelen duygu analizi, fikir madenciliği (opinion mining) olarak da anılır. Nitel araştırmanın bir yönünü oluşturan bu analizle ürünlerden, reklamlardan, lokasyonlardan, reklamlardan ve hatta rakiplerden ortaya çıkan müşteri düşüncelerini açığa çıkarılabilmektedir. Müşterilerin hoşlandığı veya hoşlanmadığı ürünlerin tespitinde bu analiz önemli rol oynayarak ürün gamı ve ürünün kalitesi şekillendirilebilmektedir. Diğer bir deyişle, firmalar müşterilerin ne hissettiğini ve düşündüğünü bilerek müşteri beklentilerini daha iyi karşılayabilir. Sağlık sektöründe de benzer durum söz konusu olabilir. Hasta beklentileri, algıları ve yönetiminin analizleri ile sağlık krizlerinde fikirlerin analizinde duygu analizlerinin yoğun bir şekilde kullanıldığı literatürden yakinen bilinmektedir. Literatürde aynı zamanda duygu analizlerinden önce kelime bulutlarının oluşturulduğu da görülmektedir.

Veri madenciliğinin (data mining) bir kolunu oluşturan metin madenciliği (text mining) metotları içinde kelime bulutları (word clouds) metinlerde en sık kullanılan anahtar kelimeleri vurgulamamıza ve görselleştirmemize olanak tanır. Bu metotlarla metin verisinden metin bulutu veya etiket bulutu diyebileceğimiz kelime bulutu oluşturulabilir. Kelime bulutları metni hızlı analiz etmemize ve kelime bulutu olarak ortaya çıkan anahtar kelimeleri görselleştirmemize olanak tanır. Bahsedilenler ışığında metin verisini sunmada kelime bulutunu kullanmanız gerektiği durumlar şunlardır:

  1. Kelime bulutları sadelik ve yalınlık sağlar. En sık kullanılan anahtar kelimeler, kelime bulutu içinde daha iyi kendini gösterir.
  2. Kelime bulutları potansiyel iletişim araçlarıdır. Kelime bulutlarının anlaşılması, paylaşılması kolaydır ve kelime bulutları etkilidirler.
  3. Kelime bulutları bir tablo verisinden görsel olarak daha ilgi çekicidir.

Kelime bulutları, sektör ayrımı gözetilmeksizin bütün alanlarda kullanılabilmekle birlikte en sık kullanılan alanlarla en sık kullanılan meslek grupları şöyle özetlenebilir;

  1. Kalitatif (nitel) araştırma yapan araştırmacılar,
  2. Müşterilerin ihtiyaçlarının belirlenmesi noktasında pazarlamacılar,
  3. Temel konuları desteklemek için eğitimciler,
  4. Politikacı ve gazeteciler
  5. Kullanıcı görüşlerini toplayan, analiz eden ve paylaşan sosyal medya siteleri

Duygu analizi (sentiment analysis) ise kendisine bir çok farklı alanda uygulama alanı bulmakta olup başlıca kullanım alanları Şekil 1 üzerinde verilmiştir:

Şekil 1: Duygu Analizi Kullanım Alanları

Duygu analizlerinde temel veri kaynaklarının sosyal medya platformları, bilim veri tabanları ve arama motorları verileri olduğu görülmektedir. Duygu analizi çalışmalarında duygu sözlükleri adı verilen “leksikon” lardan yaygın bir şekilde yararlandığı görülmektedir. Literatürde yer alan başlıca leksikonlar Şekil 2’de verilmiştir.

Şekil 2: Duygu Analizinde Kullanılan Duygu Sözlükleri

Şimdi sırayla Şekil 2’de verdiğimiz leksikonlardan kısaca bahsedelim.

Polarite Testi

En basit duygu sözlüğünü oluşturan bu testte skorlar -1 ile 1 arasında değerler almaktadır. Kelime ve cümle bazında yapılan sınıflandırmalarda negatif ve pozitif olmak iki kategori bulunmaktadır.

NRC Leksikonu

Analizde kullanılan metin NRC lexiconu açısından analiz edilmiştir. NRC lexiconu hesaplamalı dil bilimci Saif Mohammad tarafından geliştirilmiş olup bu leksikon sözlüğünde 10 duygu bulunmaktadır. Bu hisler şöyledir;

  1. positive
  2. negative
  3. Anger
  4. Anticipation
  5. Disgust
  6. Fear
  7. Joy
  8. Sadness
  9. Surprise
  10. Trust

Afinn Leksikonu

Afinn dil sözlüğü, 2009 ve 2011 yılları arasında Finn Årup Nielsen tarafından geliştirilmiş olup dil sözlüğünde skorlar -5 (negatif) ve +5 (pozitif) arasında tamsayı değerleri almaktadır.

Bing Leksikonu

Bing leksikonunda ise duygular basit bir şekilde negatif ve pozitif olarak sınıflandırılarak skorlanır.

Syuzhet Leksikonu

Syuzhet, Nebraska Dil Bilim Laboratuarında (Nebraska Literary Lab) geliştirilmiş bir duygu sözlüğüdür. “Syuzhet” adı, metni “fabula” ve “syuzhet” olmak üzere iki bileşene ayıran Rus formalist Victor Shklovsky ve Vladimir Propp’tan gelmektedir.

Loughran Leksikonu

Finansal belgelerde kullanılmak üzere geliştirilmiş duygu sözlüğüdür. Bu sözlük, kelimeleri finansal bağlamlarında ele almakta olup altı duygu kategorisinden oluşmaktadır: “olumsuz”, “pozitif”, “ihtilaflı”, “belirsizlik”, “kısıtlayıcı” veya “gereksiz” (“negative”, “positive”, “litigious”, “uncertainty”, “constraining”, or “superfluous”).

Esasında bu platform üzerinde R programlama dili kullanarak duygu analizleri üzerine 2018 yılında, kelime bulutları üzerine ise farklı tarihlerde örnek uygulamalar yapmıştım. Ancak R kodları açık kaynak olarak paylaşmamıştım. Bu çalışma kapsamında yapılan örnek uygulama ile ilk olarak metnin kelime bulutları oluşturulmuş, ardından ise dil sözlükleri kullanılarak eş zamanlı olarak duygu analizleri yapılmıştır. Aşağıda göreceğiniz üzere en ince ayrıntısına kadar bütün R kodları paylaşılmıştır. Yapacağınız tek şey minor değişikliklerle kendi çalışmalarınıza uyarlamanızdır. Ancak temel R programlama bilginizin olması tavsiye edilir.

Metodoloji ve Uygulama Sonuçları

Örnek uygulama kapsamında ilk metin verisi 30.01.2021 tarihinde ücretsiz e-kitapların çeşitli formatlarda yayınlandığı https://www.gutenberg.org/ebooks/50540 adresinden alınmıştır. Metin verisi olarak alınan eserin adı Zeyneb Hanoum tarafından kaleme alınan Bir Türk Kadınının Avrupa İzlenimleri (A Turkish Woman’s European Impressions)‘dir. Eser 23 Kasım 2015 tarihinde https://www.gutenberg.org sitesinde yayınlanmıştır. Bu metin verisi ile yukarıda linki verilen web uygulaması üzerinden kelime bulutları oluşturulacaktır. Örnek uygulama metnini word (docx) formatında aşağıdaki linkten indirebilirsiniz.

Bir Türk Kadınının Avrupa İzlenimleri

Örnek uygulama kapsamında ikinci metin pdf formatında olup, Dünya Bankası tarafından 5 Ocak 2021 tarihinde 234 sayfalık Küresel Ekonomik Beklentiler (Global Economic Prospects) raporudur. Rapor https://openknowledge.worldbank.org/bitstream/handle/10986/34710/9781464816123.pdf?sequence=15&isAllowed=y url adresinde yayınlanmıştır.  Bu raporla ilgili 22 Şubat 2021 tarihinde blog sitemde, 23 Şubat 2021 tarihinde ise Sanayi Gazetesi’nde “Küresel Ekonomik Beklentiler 2021 Ocak Dönemi Raporuadlı yazım yayımlanmıştır. Raporu incelediğim için acaba bu raporun kelime bulutu ve duygu analizini de yapsam nasıl olur diye kendime sordum 🙂 . Neticede denemesi bedava 🙂 . Bu soru beni bu raporun kelime bulutlarını oluşturmaya ve duygu analizlerini yapmaya itmiştir. Bu çalışma kaynağından okunarak hem kelime bulutları çıkarılmış, ardından duygu analizleri yapılmıştır. İlk örnek uygulamanın aksine bu çalışma pdf formatında olan metinlerin analizini içerdiğinden bu yönüyle farklılık göstermektedir. Bu kısımdaki analiz 3. PDF dokümanların kelime bulutlarının çıkarılması ve duygu analizlerinin yapılması başlığı altında ele alınmıştır.

Örnek uygulama kapsamında 3. çalışma sentetik veriler üretilip kelime bulutlarının oluşturulmasıdır. 3. çalışma kapsamında sentetik olarak üretilen kelimelerin büyük bir çoğunluğu İstiklal Marşımızdan alınmıştır. Burada sentetik verilerin üretilmesinde tekrarlı örnekleme tekniği kullanılmış ve 10.000 gözlem üretilmiştir. Bu gözlemler üzerinde kelime bulutları oluşturulmuştur. Bu bölümdeki analiz ise 4. Sentetik veriler üzerinden kelime bulutlarının oluşturulması başlığı altında irdelenmiştir.

Çalışma kapsamında ilk olarak metnin kelime bulutları oluşturulmuş, ardından ise dil sözlükleri kullanılarak duygu sözlüklerine göre duygu analizleri yapılmıştır. İlk olarak analizde kullanılacak R kütüphanelerini vererek işe başlayalım. Aşağıda gerekenden fazla kütüphane verdiğimi biliyorum. Ancak daha çok esneklik ve estetik tasarım tanıdığı için genellikle olması gerekenden fazla kütüphane ile çalışıyorum. Kelime bulutlarının oluşturulması ve duygu analizlerinde kullanılan temel paketler “sentimentr”,”webshot”,”stringr”, “wordcloud”, “wordcloud2″,”RColorBrewer”, “htmlwidgets”,”syuzhet” paketleridir. Analizlerde R programlama dili kullanılmıştır. Bulguların çalışma kitaplarına yazdırılmasında ise xlsx uzantılı Microsoft Excel çalışma kitapları kullanılmıştır.

Yüklenecek Kütüphaneler

#Kütüphaneler

kütüphane<-c("dplyr","tibble","tidyr","ggplot2","ggthemes","readr","readxl","ggpubr","formattable", "ggstance", "pastecs","writexl", "psych", "GGally","pander", "rstatix", "stringr", "sentimentr","webshot","stringr","wordcloud", "wordcloud2","RColorBrewer", "htmlwidgets","syuzhet")
yükle<-sapply(kütüphane, require, character.only = TRUE)

#Kütüphane yüklenme durumunu gösteren tablo

tablo=suppressWarnings(yükle, classes = "warning")
  
isim=names(tablo)
  
deger=as_tibble(tablo)
  
data.frame(sira=1:length(isim), kutuphane=isim, yuklenme_durumu=deger$value) %>% mutate(yuklenme_durumu=if_else(yuklenme_durumu==TRUE, "Yuklendi", "Paket Kurulumu Gerekli")) %>% pander(caption="Kütüphane Yüklenme Bilgisi")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra yukarıdaki kütüphanelerin yüklenip yüklenmediğine dair aşağıdaki gibi mantıksal vektör sonuçları gelecektir. Eğer mantıksal vektör sonuçlarının hepsi TRUE ise kütüphanelerin hepsini yüklenmiştir demektir. Kolaylık sağlaması açısından yukarıda kütüphanelerin yüklenmesini gösterir tabloyu da elde etmek ve daha kolay okumanız için yukarıdaki kod bloğu içerisinden kısa bir kod yazdım. Bu kod çalıştırıldığında aşağıdaki tabloda görüleceği üzere bütün kütüphaneler yüklenmiştir. Eğer ilgili kütüphane yüklenmemiş olursa “Paket Kurulumu Gerekli” ifadesi satırda yazacaktır. Satırda yazan bu uyarı metnine göre paketi ya kurar yada yüklersiniz. Bir paketin kurulması ile yüklenmesinin aynı şey olmadığını burada ifade etmek gerekir konuyu yabancı olanlar için. Paket kurulumu ilk defa yapılan bir işlem iken, paketin yüklenmesi zaten kurulan bir paketin yüklenmesi yani çalışır duruma getirilmesidir. İlk defa bir paket kurulumu gerçekleştiriliyorsa install.packages() fonksiyonunu, zaten bir paket kurulumu gerçekleştirilmiş ise ilgili paketin veya kütüphanenin yüklenmesi veya okunması için library() veya require() fonksiyonlarını kullanıyoruz. Fonksiyonlardaki parantez () içerisine yüklenecek paket veya kütüphane adını yazıyoruz.

---------------------------------------
 sira    kutuphane     yuklenme_durumu 
------ -------------- -----------------
  1        dplyr          Yuklendi     

  2        tibble         Yuklendi     

  3        tidyr          Yuklendi     

  4       ggplot2         Yuklendi     

  5       ggthemes        Yuklendi     

  6        readr          Yuklendi     

  7        readxl         Yuklendi     

  8        ggpubr         Yuklendi     

  9     formattable       Yuklendi     

  10      ggstance        Yuklendi     

  11      pastecs         Yuklendi     

  12      writexl         Yuklendi     

  13       psych          Yuklendi     

  14       GGally         Yuklendi     

  15       pander         Yuklendi     

  16      rstatix         Yuklendi     

  17      stringr         Yuklendi     

  18     sentimentr       Yuklendi     

  19      webshot         Yuklendi     

  20      stringr         Yuklendi     

  21     wordcloud        Yuklendi     

  22     wordcloud2       Yuklendi     

  23    RColorBrewer      Yuklendi     

  24    htmlwidgets       Yuklendi     

  25      syuzhet         Yuklendi     
---------------------------------------

Table: Kütüphane Yüklenme Bilgisi

1. Kelime bulutlarının oluşturulması

Bu kısımda bahse konu metin üzerinden adım adım kelime bulutları oluşturulacaktır. Kelime bulutlarının oluşturulması frekanslara göre oluşturulduğundan metnin dili çok belirleyici olmamaktadır. Ancak duygu analizinde durum biraz farklıdır. Yani duygu analizi yapıyorsanız metnin bulunduğu dili destekleyen bir R kütüphanesi ile çalışmak zorundasınız. Bunu da yeri gelmişken burada ifade etmekte yarar olduğunu düşünüyorum.

Veri setinin okunması

bs1 <- read.delim("metin.txt", col.names = "cumle")
bs1

Veri setindeki ilk 10 satırı tablo formatında aşağıda yazılan kod bloğu ile verebiliriz.

bs1 %>% head(10) %>% formattable()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen ilk 10 satır aşağıdaki tabloda verilmiştir.

Veri setinin yapısının incelenmesi

Aşağıda yazılan kod bloğu ile veri setindeki değişken tipi ve gözlem sayısı ortaya konulmuştur.

glimpse(bs1)

#alternatif
str(bs1)

Yukarıdaki kod bloğu çalıştırıldığında aşağıda verildiği üzere veri setinin 3,264 gözlemden yani cümleden oluştuğu, değişken tipinin ise karakter yani nominal olduğu görülmektedir. Veri setinin 1 değişkenden oluştuğu ve değişkenin “cumle” olduğu da görülmektedir.

Rows: 3,264
Columns: 1
$ cumle <chr> "This eBook is for the use of anyone anywhere at no cost and with", "almost no restrictions w...

Metin verisinin kelime bulutu oluşturulmadan önce temizlenmesi ve çıkarılacak kelimelerin belirlenmesi

Bu kısımda ilk olarak aşağıda yazılan kelimeler metinden çıkarılacaktır. Bu kısımda ister Türkçe isterse diğer dillerde çıkarılacak kelimeleri belirleyebilirsiniz.

rmv1<-c("may", "can","years","age","mean","diet", "qol","based","dog","two","per","model","will","is","aarc","results","label","among","are","level","cancer", "used","many", "nlm", "data", "study", "p", "n", "net", "biochar", "aloe", "ses", "systems","avs", "acid","rate","aha","year","time","since","stroke", "however", "p lt", "ssris", "score", "index","hia", "largest", "current", "ncds", "found", "labelobjective", "It","yet","models", "vera","total", "also", "ptsd", "lt", "sroi", "icdm", "scores", "new", "arm", "china", "sample", "semen", "survey", "labelconclusions","within","labelbacground","range","followed","tagsnps","mbovis","labeldesign","increased","published", "likely", "nlmcategorymethods", "acids", "fatty", "employersponsored","labelmethods", "using", "conclusions","setting", "whether","findings","crosssectional", "one", "three","review","associated", "analysis", "studies", "nlmcategory", "background", "nlmcategorymethods", "in", "of", "and", "as", "19", "the","have","were","an", "was", "during", "to", "for","a", "cth","or","hcs", "this", "u","ci", "t", "la", "043d", "064a","043b", "062a", "trastuzumab","ewars","research", "either", "ipps73","ippss","87,017", "ofips", "15,000", "eshre","tdabc","thaihealth", "0.157", "and", "analyzed", "methods", "terms", "subjects", "being", "there", "compared", "while",  "when", "their","these","between", "his","her", "which", "that","who", "after","related","higher","group", "other","each","those","lower", "number","rates","first", "about", "groups","through","including", "across", "should", "must", "have","months","adjusted", "analyses", "estimated", "could", "would", "without", "further", "versus", "cross", "method", "follow", "general", "under", "below", "estimate","following", "received", "available", "before", "aimed", "collected", "often", "often","include","relevant","having","therefore","because","thus", "gutenberg","almost", "license", "ebook", "anyone", "anywhere", "title", "author", "enough", "nothing", "cannot", "really", "never", "again", "wwwgutenbergorg", "whatsoever", "editor", "chapter","perhaps", "shall", "every","where", "been", "more", "than", "even", "with", "what",  "who", "when", "only", "your", "into", "in", "on", "always", "online", "copy", "away", "back", "myself", "still")

Bu kısımda aşağıda yazılan kod bloğundaki satırlarda sırasıyla;

  • Metindeki harflerin tamamı küçük harfe dönüştürülmüştür.
  • Metindeki noktalama işaretleri kaldırılmıştır.
  • Metinle iç içe geçmiş (kızgın325 gibi) rakam ve sayılar metinden ayıklanmıştır.
  • Metinden rakam ve sayılar çıkarılmıştır.
  • Yukarıdaki belirtilen kelimeler metinden çıkarılmıştır. Burada dikkat edilirse çıkarılan kelimeler daha çok zamir, sıfat, edat ve bağlaçlardır. İsteğe bağlı olarak burada değişiklikler yapabilirsiniz.
  • Karakter sayısı 3’ten büyük kelimeler filtrelenmiştir. İsteğe bağlı olarak burada değişiklikler yapabilirsiniz.
  • Metin istenmeyen formatta kelimeler varsa ve bu kelimeleri çıkarmanız analize zarar verecekse yerine kelimeler atayabilirsiniz.
  • Metnin değişiklikler sonrası “tibble” tablo düzenine dönüştürülmüştür.
tr<-bs1 %>% mutate(word=str_to_lower(cumle))%>% unnest_tokens(word, cumle) # Metindeki harflerin tamamı küçük harfe dönüştürülmüştür.
tr<-tr %>% mutate(word=removePunctuation(word)) # Metindeki noktalama işaretleri kaldırılmıştır.
tr<-tr %>% mutate(word=str_squish(word)) # Metinle iç içe geçmiş (kalem325) rakam ve sayılar metinden ayıklanmıştır.
tr<-tr %>% mutate(word=removeNumbers(word)) # Metinden rakam ve sayılar çıkarılmıştır.
tr<-tr %>% filter(!word %in% rmv1) # Yukarıdaki belirtilen kelimeler metinden çıkarılmıştır. Burada dikkat edilirse çıkarılan kelimeler daha çok zamir, sıfat, edat ve bağlaçlardır. İsteğe bağlı olarak burada değişiklikler yapabilirsiniz.
tr<-tr %>% filter(str_length(word)>3) # Karakter sayısı 3'ten büyük kelimeler filtrelenmiştir. İsteğe bağlı olarak burada değişiklikler yapabilirsiniz.
tr<-str_replace(tr$word, "[ı]", "i") # Metin istenmeyen formatta kelimeler varsa ve bu kelimeleri çıkarmanız analize zarar verecekse yerine kelimeler atayabilirsiniz.
tr<-tr %>% as_tibble()%>%rename(word=value) # Metnin değişiklikler sonra tibble tablo düzenine dönüştürülmüştür.
tr

Kelime sıklıklarının ortaya konulması

Aşağıda yazılan kod bloğunda metindeki kelimelerin sıklıkları bulunmuş, ardından ise frekansı en yüksek ilk 50 kelime verilmiştir. En sonda ise kelimeler ve frekansları xlsx uzantılı Microsoft Excel çalışma kitabına yazdırılmıştır.

# Kelime sıklıklarının elde edilmesi
sayi<-tr %>% group_by(word) %>% count() %>% arrange(desc(n))
sayi<-sayi %>% add_column(id=1:NROW(sayi),.before = "word")
sayi

#Frekansı en yüksek ilk 50 kelime
sayi %>% head(50)  %>% pander(caption="Frekansı En Yüksek İlk 50 Kelime")

#xlsx uzantılı çalışma kitabına sıklıklarına göre kelimelerin yazdırılması
write_xlsx(sayi, "kelimeler.xlsx")

Yukarıdaki kod bloğunda ikinci alt blok çalıştırıldığında elde edilen frekansı en yüksek ilk 50 kelime aşağıda verilmiştir.

---------------------------
 id        word         n  
---- ---------------- -----
 1         they        250 

 2       turkish       154 

 3         from        138 

 4        women        130 

 5         life        97  

 6        little       84  

 7         them        82  

 8        woman        79  

 9       country       66  

 10        know        66  

 11       people       64  

 12        same        55  

 13        come        54  

 14        like        54  

 15       zeyneb       54  

 16       turkey       52  

 17        here        50  

 18        much        50  

 19        very        50  

 20        said        47  

 21        some        47  

 22       think        46  

 23        most        44  

 24        such        43  

 25        then        43  

 26       harem        42  

 27        find        40  

 28       great        40  

 29        long        38  

 30        west        38  

 31      western       38  

 32       friend       37  

 33        ever        36  

 34        over        35  

 35        seen        35  

 36       asked        34  

 37        came        34  

 38     understand     34  

 39       house        32  

 40       paris        32  

 41        went        32  

 42        made        31  

 43        read        31  

 44        told        31  

 45        left        30  

 46      thought       30  

 47   constantinople   29  

 48       seemed       29  

 49        tell        29  

 50      another       28  
---------------------------

Table: Frekansı En Yüksek İlk 50 Kelime

Yukarıdaki kod bloğunda üçüncü alt blok çalıştırıldığında elde edilen kelimeler ve frekansları xlsx uzantılı Microsoft Excel çalışma kitabına yazdırılmış olup aşağıda linkten indirebilirsiniz.

Kelime bulutlarının oluşturulması

Bu kısımda aynı metinden birden fazla kelime bulutu oluşturulacaktır. İlk kelime bulutunu wordcloud kütüphanesini kullanarak aşağıdaki kod bloğunda verelim. Aşağıda yazılan kod bloğunda kelime frekansımız minimum 20, maksimum 200 olacak şekilde düzenledik. Dilerseniz wordcloud fonksiyonu içerisindeki parametreleri değiştirerek farklı alternatifler deneyebilirsiniz.

set.seed(1923) # Aynı sonuçları almak için sabitlenmiştir.
wordcloud(words = sayi$word, freq = sayi$n, min.freq = 20,
          max.words=200, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde ettiğimiz kelime bulutu aşağıda verilmiştir. Aşağıdaki kelime bulutunda dikkat edeceğiniz üzere metinde hala temizlenmeyi bekleyen “they”, “whom”, “till”, “does”, “over”, “from”, “just”, “here”, “some” gibi zamir, yardımcı fiiller ve yer zarfları bulunmaktadır. Literatürde yapılan çalışmalarda bu hususa çok dikkat edildiği söylenemez ama siz dikkat etmelisiniz iyi bir araştırma ortaya koymak açısından. Metin verisinin kelime bulutu oluşturulmadan önce temizlenmesi ve çıkarılacak kelimelerin belirlenmesi başlığı altında yer alan kod bloğundaki vektör içerisine bahsettiğim bu kelimeleri girerek kelime bulutundan bu kelimeleri çıkarabilirsiniz.

Şimdi de diğer kütüphanemiz olan wordcloud2‘yi kullanarak kelime bulutları oluşturalım. Burada aynı zamanda oluşturulan kelime bulutu png ve html uzantılı olarak da kaydedilmektedir. Aşağıda yazılan kod bloğunda en yüksek frekansa sahip ilk 250 satırdaki kelimelerin frekansı ele alınmıştır.

#kelime bulutunun oluşturulması
hw1=wordcloud2(head(sayi[,2:3], 250), size=1, minSize = 10, shape = "circle", color = "random-light",backgroundColor = "black")

#html ve png olarak kaydedilmesi
saveWidget(hw1,"26.html",selfcontained = F)
webshot::webshot("26.html","hw1.png",vwidth = 1800, vheight = 1000, delay =10)

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde ettiğimiz kelime bulutu aşağıda verilmiştir.

Farklı düzenlerde kelime bulutunu elde etmek mümkündür. Yıldız şeklinde eğer kelime bulutu elde etmek istersek yazacağımız kod bloğunda yapacağımız tek şey shape parametresinde “star” şeklinde değişiklik yapmaktır.

#kelime bulutunun oluşturulması
hw1=wordcloud2(head(sayi[,2:3], 250), size=1, minSize = 10, shape = "star", color = "random-light",backgroundColor = "black")

#html ve png olarak kaydedilmesi
saveWidget(hw2,"27.html",selfcontained = F)
webshot::webshot("27.html","hw1.png",vwidth = 1800, vheight = 1000, delay =10)

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde ettiğimiz kelime bulutu aşağıda verilmiştir.

Şimdide aşağıda yazılan kod bloğunda beşgen (pentagon) düzeninde ve gri arka planında başka bir kelime bulutu oluşturalım. Aynı zamanda veri setinde frekansı en yüksek ilk 350 kelimeyi baz alalım.

#kelime bulutunun oluşturulması
hw1=wordcloud2(head(sayi[,2:3], 350), size=1, minSize = 10, shape = "pentagon", color = "random-light",backgroundColor = "grey")

#html ve png olarak kaydedilmesi
saveWidget(hw2,"27.html",selfcontained = F)
webshot::webshot("27.html","hw1.png",vwidth = 1800, vheight = 1000, delay =10)

Yukarıda yazılan kod bloğunun çalıştırılmasından sonra elde edilen beşgen (pentagon) düzeninde ve gri arka planında kelime bulutu aşağıda verilmiştir.

2. Duygu analizlerinin yapılması

Bu kısımda yukarıda giriş kısmında bahsedilen dil sözlükleri kullanılarak duygu analizleri yapılacaktır.

Polarite testi

Bu kısımda aşağıda yazılan kod bloğu ile kelime bazlı polarite testi yapılmıştır. Cümle bazlı polarite testi yapılabileceğini hatırlatmakta fayda vardır.

polarite<-sentiment(tr$word)

tablo<-cbind(tr$word, polarite[,c(3,4)])

  ggplot(tablo, aes(word_count, sentiment))+
  geom_point(color="blue")+
  geom_hline(yintercept = mean(tablo$sentiment), color="red", size=1)+
  labs(y = "Skor", x = "Kelimelerin Frekansı") +
  theme_igray()+
  labs(caption = "Veri Kaynağı: A Turkish Woman’s European Impressions adlı eserden Tevfik Bulut tarafından analiz edilmiştir.") +
  theme(plot.caption = element_text(hjust = 0, face = "italic"))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen polarite skorları aşağıdaki grafikte verilmiştir. Daha önce polarite skorlarının -1 ile +1 arasında değiştiğini ifade etmiştik. Elde edilen bulgular eserde hakim olan duygunun nötr (0)’e yakın olduğunu göstermektedir.

Polarite test sonuçlarına ilişkin tanımlayıcı istatistikler ise aşağıda yazılan kod bloğu ile elde edilmiştir.

stat.desc(polarite$sentiment, basic=T) %>% pander()

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Polarite testi tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Elde edilen ortalama (0,02947) polarite test değeri nötr (0)’e yakın bir görünüm sergilemektedir.

----------------------------------------------------------------------------
 nbr.val   nbr.null   nbr.na   min   max   range    sum    median    mean   
--------- ---------- -------- ----- ----- ------- ------- -------- ---------
  14754     10936       0      -1     1      2     434.8     0      0.02947 
----------------------------------------------------------------------------

Table: Table continues below

 
-------------------------------------------------------
 SE.mean    CI.mean.0.95    var     std.dev   coef.var 
---------- -------------- -------- --------- ----------
 0.002724     0.00534      0.1095   0.3309     11.23   
-------------------------------------------------------

Bing leksikonu

Aşağıda yazılan kod bloğu ile Bing leksikonu duygu grupları (pozitif ve negatif) elde edilmiştir.

d6<-sayi[,-1] %>% inner_join(get_sentiments("bing"),by="word")
d6[,c(1,3,2)]%>% group_by(sentiment) %>% arrange(desc(n)) %>%
  top_n(10) %>%
  ggplot(aes(x=reorder(word,n), y=n, fill = sentiment)) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~sentiment, scales = "free_y") +
  labs(
    y = "Kelime",
    x = "Sıklık"
  ) +
  coord_flip()+
 theme_hc()+
 labs(caption = "A Turkish Woman’s European Impressions adlı eserden Tevfik Bulut tarafından analiz edilmiştir.")+
 theme(plot.caption = element_text(hjust = 0, face = "italic"))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Bing leksikonu sonuçları kelime frekansı en yüksek olan ilk 10 kelimeye göre aşağıdaki grafikte verilmiştir. Elde edilen bulgular metinde baskın olan duygunun olumlu (pozitif) olduğunu göstermektedir.

Bing leksikonuna ilişkin tanımlayıcı istatistikler ise aşağıda yazılan kod bloğunda verilmiştir.

d6<-sayi[,-1] %>% inner_join(get_sentiments("bing"),by="word")
#duygu grubuna göre frekanslar
d6[,c(1,3,2)]%>% group_by(sentiment) %>% summarise(toplam=sum(n)) %>% mutate(oran=round(toplam/sum(toplam)*100,2)) %>% arrange(desc(oran)) %>% formattable()

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Bing leksikonu tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Aşağıda verilen bulgudan şu bilgi çıkarılmalıdır: Metinde pozitif kelimelerin frekansı ve frekansların oranı (n=1119, frekansların toplam içindeki oranı = %52,09) negatif olanlardan daha yüksek olduğundan metinde pozitif duygu daha ağır basmaktadır.

Afinn leksikonu

Afinn dil sözlüğünde skorlar -5 (negatif) ve +5 (pozitif) arasında tamsayı değerleri almaktadır. Afinn leksikonu bulguları aşağıda yazılan kod bloğu ile elde edilmiştir.

#Afinn leksikon değerlerinin elde edilmesi
d6<-tr %>% inner_join(get_sentiments("afinn"),by="word")

#Tanımlayıcı istatistikler
stat.desc(d6$value, basic=T) %>% pander()

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Afinn leksikonu tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Aşağıda verilen bulgudan şu bilgi çıkarılmalıdır: Afinn leksikon sonuçlarına bakıldığında merkezi dağılım ölçülerinden biri olan ortalama 0,3821 olduğu için metinde nötr (0)’ün biraz üstünde ve pozitife yakın duyguların daha ağırlıkta olduğu söylenebilir.

-------------------------------------------------------------------------
 nbr.val   nbr.null   nbr.na   min   max   range   sum   median    mean  
--------- ---------- -------- ----- ----- ------- ----- -------- --------
  1879        0         0      -4     4      8     718     1      0.3821 
-------------------------------------------------------------------------

Table: Table continues below

 
-----------------------------------------------------
 SE.mean   CI.mean.0.95    var    std.dev   coef.var 
--------- -------------- ------- --------- ----------
 0.04935      0.0968      4.577    2.139     5.599   
-----------------------------------------------------

Loughran leksikonu

Loughran leksikonunda kelimeler altı duygu kategorisinde ele alınır: “olumsuz”, “pozitif”, “ihtilaflı”, “belirsizlik”, “kısıtlayıcı” veya “gereksiz” (“negative”, “positive”, “litigious”, “uncertainty”, “constraining”, or “superfluous”). Loughran leksikonu bulguları aşağıda yazılan kod bloğu ile elde edilmiştir.

#Loughran leksikon değerlerinin elde edilmesi
l1<-tr %>% inner_join(get_sentiments("loughran"),by="word")

#Duygu grubuna göre frekanslar
l1 %>% group_by(sentiment) %>% summarise(toplam=n()) %>% mutate(oran=round(toplam/sum(toplam)*100,2)) %>% arrange(desc(oran)) %>% formattable()

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Loughran leksikonu tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Aşağıda verilen bulgudan şu sonuç çıkarılmalıdır: %45,53 ile negatif duygunun metnin genelinde baskın olduğu görülmektedir. Metinde negatif duyguyu pozitif ve belirsizlik duyguları izlemiştir.

Loughran leksikonu sonuçları aşağıda yazılan kod bloğu ile grafik üzerinde de verebiliriz.

  l1 %>% 
  group_by(sentiment) %>% summarise(n=n())%>%
  ggplot(aes(reorder(sentiment, n), n, fill=sentiment)) +
  geom_bar(stat="identity", show.legend = FALSE)+
  labs(y = "Frekans", x = "Duygu")+
  theme_igray()+
  labs(caption = "Veri Kaynağı: A Turkish Woman’s European Impressions adlı eserden Tevfik Bulut tarafından analiz edilmiştir.")+
  theme(plot.caption = element_text(hjust = 0, face = "italic"))

Yukarıdaki kod bloğu çalıştırıldığında Loughran leksikonuna göre metinden elde edilen duygular aşağıdaki grafikte verilmiştir.

Dil sözlükleri içerisinde duygu kategorisine filtreleme yapmak oldukça kolaydır. Örnek teşkil teşkil etmesi adına Loughran leksikonunda pozitif olarak etiketlenen kelimelerden ilk 50’sini aşağıda yazılan kod bloğu ile verelim. Dilersek pozitif olarak etiketlenen kelimelerin tamamı elde edebilir ve xlsx uzantılı çalışma kitaplarına yazdırabiliriz. Benzer işlemleri diğer dil sözlüklerinde de yapabiliriz.

l1 %>% filter(sentiment=='positive') %>% head(50) %>% pander(caption="Pozitif olarak etiketlenen ilk 50 kelime")

Yukarıdaki kod bloğunun çalıştırılmasından sonra metinde pozitif olarak etiketlenen ilk 50 kelime aşağıdaki tabloda verilmiştir.

-------------------------
    word       sentiment 
------------- -----------
    good       positive  

    dream      positive  

    great      positive  

    easy       positive  

   better      positive  

    great      positive  

  greatest     positive  

 diligently    positive  

  progress     positive  

 exclusively   positive  

    great      positive  

    great      positive  

  happiness    positive  

  pleasure     positive  

    great      positive  

    great      positive  

   highest     positive  

  beautiful    positive  

   pleased     positive  

  strength     positive  

   better      positive  

  pleasure     positive  

   perfect     positive  

  delighted    positive  

   impress     positive  

    great      positive  

    best       positive  

  stronger     positive  

  beautiful    positive  

  beautiful    positive  

   winner      positive  

    great      positive  

  satisfied    positive  

    great      positive  

    great      positive  

  beautiful    positive  

    happy      positive  

  greatest     positive  

    easy       positive  

    great      positive  

    great      positive  

  pleasure     positive  

    able       positive  

  stronger     positive  

   invent      positive  

    great      positive  

   better      positive  

   leading     positive  

 compliment    positive  

    great      positive  
-------------------------

Table: Pozitif olarak etiketlenen ilk 50 kelime

Şimdide Loughran leksikonunda duygulara göre etiketlenmiş kelimelerin tamamını aşağıda yazılan kod bloğu ile verelim.

l1<-tr %>% inner_join(get_sentiments("loughran"),by="word")
write_xlsx(l1, "loughranleksikonu.xlsx")

Yukarıdaki kod bloğunun çalıştırılmasından sonra Loughran leksikonundaki duygu kategorilerine göre etiketlenmiş metindeki bütün kelimeler xlsx uzantılı Microsoft Excel çalışma kitabına yazdırılmış olup aşağıdaki linkten indirebilirsiniz.

Loughran leksikonundaki duygu kategorilerine göre etiketlenmiş 50 kelimeyi olasılıklı örnekleme yöntemlerden biri olan ve önyargı (bias) içermeyen tekrarsız basit tesadüfi örnekleme yöntemi kullanarak seçmek için aşağıdaki gibi basit bir kod satırı yazalım.

set.seed(1985) # Örneklemde aynı gözlem birimlerinin elde edilmesi için sabitlenmiştir.
tr %>% inner_join(get_sentiments("loughran"),by="word") %>% sample_n(50) %>% pander(caption="Basit Tekrarsız Örnekleme Yöntemi İle Seçilen Kelimeler ve Duygu Etiketleri")

Loughran leksikonundaki duygu kategorilerine göre etiketlenmiş 50 kelime tekrarsız basit tesadüfi örnekleme yöntemi kullanarak belirlenmiş ve aşağıdaki tabloda verilmiştir.

-----------------------------
     word        sentiment   
-------------- --------------
 exceptional      positive   

  neglected       negative   

     poor         negative   

    doubt       uncertainty  

    unjust        negative   

  delighted       positive   

    strict      constraining 

     hurt         negative   

   possible     uncertainty  

   pleased        positive   

     risk       uncertainty  

    great         positive   

 disastrously     negative   

    error         negative   

    slowly        negative   

     good         positive   

     late         negative   

   probably     uncertainty  

   believed     uncertainty  

    risked      uncertainty  

     good         positive   

    great         positive   

   exposed        negative   

 permissible    constraining 

    force         negative   

   perfect        positive   

    great         positive   

    great         positive   

    ceased        negative   

    might       uncertainty  

 unknowingly      negative   

     lost         negative   

   against        negative   

    strong        positive   

    court        litigious   

    great         positive   

   pleasure       positive   

   suddenly     uncertainty  

  satisfied       positive   

  exaggerate      negative   

    vague       uncertainty  

   believed     uncertainty  

  excitement      positive   

     best         positive   

    great         positive   

  criticism       negative   

   harmful        negative   

 disappointed     negative   

   pleasure       positive   

  suffering       negative   
-----------------------------

Table: Basit Tekrarsız Örnekleme Yöntemi İle Seçilen Kelimeler ve Duygu Etiketleri

Nrc leksikonu

NRC dil sözlüğünde 10 duygu bulunmaktadır. Bu duygular şöyledir:

  1. positive
  2. negative
  3. Anger
  4. Anticipation
  5. Disgust
  6. Fear
  7. Joy
  8. Sadness
  9. Surprise
  10. Trust

Aşağıda yazılan kod bloğu ile Nrc leksikonuna göre metindeki duygular ortaya konulmuştur.

#Nrc leksikon değerlerinin elde edilmesi
nrc<-tr %>% inner_join(get_sentiments("nrc"),by="word")

#Duygu grubuna göre frekanslar
nrc %>% group_by(sentiment) %>% summarise(toplam=n()) %>% mutate(oran=round(toplam/sum(toplam)*100,2)) %>% arrange(desc(oran)) %>% formattable()

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Nrc leksikonu tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Aşağıda verilen bulgudan şu sonuç çıkarılmalıdır: %22,12 ile pozitif duygunun metnin genelinde baskın olduğu görülmektedir. Metinde pozitif duyguyu negatif ve güven (trust) duyguları izlemiştir.

Nrc leksikonu sonuçlarına frekansı en yüksek ilk 5 kelime duygu kategorilerine göre aşağıda yazılan kod bloğu ile grafik üzerinde de verilmiştir.

   nrc  %>% 
   group_by(sentiment) %>% 
   count(word, sort=T) %>% 
   top_n(5) %>% 
   ggplot(aes(reorder(word, n), n, fill=sentiment)) +
   geom_bar(stat="identity", show.legend = FALSE) +
   facet_wrap(~sentiment, scales="free_y", ncol=5) +
   labs(y = "Frekans", x = NULL) +
   coord_flip()+
   labs(caption = "Veri Kaynağı: A Turkish Woman’s European Impressions adlı eserden Tevfik Bulut tarafından analiz edilmiştir.")+
   theme(plot.caption = element_text(hjust = 0, face = "italic"))

Yukarıdaki kod bloğu çalıştırıldığında Nrc leksikonuna göre metinden elde edilen duygular aşağıdaki grafikte verilmiştir.

Syuzhet leksikonu

Syuzhet leksikonu -1 +1 değeri arasında değer almaktadır. Bu leksikona dair bulgular aşağıda yazılan kod bloğu ile elde edilmiştir.

#Syuzhet leksikon değerlerinin elde edilmesi
sskor=get_sentiment(as.vector(tr$word), method="syuzhet")
syuzhet=tibble(kelime=tr$word, skor=sskor)

#Tanımlayıcı istatistikler
stat.desc(syuzhet$skor, basic=T) %>% pander()

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Syuzhet leksikonu tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Aşağıda verilen bulgudan şu bilgi çıkarılmalıdır: Syuzhet leksikon sonuçlarına bakıldığında merkezi dağılım ölçülerinden biri olan ortalama 0,02742 olduğu için metinde nötr (0)’ün biraz üstünde ve pozitife yakın duyguların daha ağırlıkta olduğu söylenebilir. Syuzhet testinde elde edilen ortalama değer ile polarite (negatif ve pozitif duygular) testi sonucu elde edilen ortalama (0,02947) değer birbirine oldukça yakındır.

----------------------------------------------------------------------------
 nbr.val   nbr.null   nbr.na   min   max   range    sum    median    mean   
--------- ---------- -------- ----- ----- ------- ------- -------- ---------
  14754     11031       0      -1     1      2     404.5     0      0.02742 
----------------------------------------------------------------------------

Table: Table continues below

 
-------------------------------------------------------
 SE.mean    CI.mean.0.95    var     std.dev   coef.var 
---------- -------------- -------- --------- ----------
 0.002631     0.005157     0.1021   0.3196     11.66   
-------------------------------------------------------

3. PDF dokümanların kelime bulutlarının çıkarılması ve duygu analizlerinin yapılması

Bu kısımda bahse konu metin üzerinden adım adım kelime bulutları oluşturulacaktır. Kelime bulutlarının oluşturulması frekanslara göre oluşturulduğundan metnin dili çok belirleyici olmamaktadır.

Veri setinin kaynağından okunması

#Raporun bulunduğu URL adresi
url="https://openknowledge.worldbank.org/bitstream/handle/10986/34710/9781464816123.pdf?sequence=15&isAllowed=y"
# Pdf fonksiyonu içerisinde URL adresinin tanımlanması ve dilin ingilizce olarak belirlenmesi doküman ingilizce olduğu için
rapor<- readPDF(control=list(text="-layout"))(elem=list(uri=url), language="en")
rapor <- rapor$content
#Rapor içeriğinin tibble tablo formatına dönüştürülmesi
rp=as_tibble(rapor) %>% rename(cumle=value)
rp

Veri setinin yapısının incelenmesi

Aşağıda yazılan kod bloğu ile veri setindeki değişken tipi ve gözlem sayısı ortaya konulmuştur.

glimpse(rp)

#alternatif
str(rp)

Yukarıdaki kod bloğu çalıştırıldığında aşağıda verildiği üzere veri setinin 234 gözlemden yani cümleden oluştuğu, değişken tipinin ise karakter yani nominal olduğu görülmektedir. Veri setinin 1 değişkenden oluştuğu ve değişkenin “cumle” olduğu da görülmektedir. Bu veri setinde her bir gözlem raporun bir sayfasını göstermektedir. Zira söz konusu rapor da 234 sayfadan oluşmaktadır.

Rows: 234
Columns: 1
$ cumle <chr> "A World Bank Group\r\nFlagship Report\r\n                   JANUARY 2021\r\n

Metin verisinin kelime bulutu oluşturulmadan önce temizlenmesi ve çıkarılacak kelimelerin belirlenmesi

Bu kısımda ilk olarak aşağıda yazılan kelimeler metinden çıkarılacaktır. Bu kısımda ister Türkçe isterse diğer dillerde çıkarılacak kelimeleri belirleyebilirsiniz.

rmv1<-c("may", "can","years","age","mean","diet", "qol","based","dog","two","per","model","will","is","aarc","results","label","among","are","level","cancer", "used","many", "nlm", "data", "study", "p", "n", "net", "biochar", "aloe", "ses", "systems","avs", "acid","rate","aha","year","time","since","stroke", "however", "p lt", "ssris", "score", "index","hia", "largest", "current", "ncds", "found", "labelobjective", "It","yet","models", "vera","total", "also", "ptsd", "lt", "sroi", "icdm", "scores", "new", "arm", "china", "sample", "semen", "survey", "labelconclusions","within","labelbacground","range","followed","tagsnps","mbovis","labeldesign","increased","published", "likely", "nlmcategorymethods", "acids", "fatty", "employersponsored","labelmethods", "using", "conclusions","setting", "whether","findings","crosssectional", "one", "three","review","associated", "analysis", "studies", "nlmcategory", "background", "nlmcategorymethods", "in", "of", "and", "as", "19", "the","have","were","an", "was", "during", "to", "for","a", "cth","or","hcs", "this", "u","ci", "t", "la", "043d", "064a","043b", "062a", "trastuzumab","ewars","research", "either", "ipps73","ippss","87,017", "ofips", "15,000", "eshre","tdabc","thaihealth", "0.157", "and", "analyzed", "methods", "terms", "subjects", "being", "there", "compared", "while",  "when", "their","these","between", "his","her", "which", "that","who", "after","related","higher","group", "other","each","those","lower", "number","rates","first", "about", "groups","through","including", "across", "should", "must", "have","months","adjusted", "analyses", "estimated", "could", "would", "without", "further", "versus", "cross", "method", "follow", "general", "under", "below", "estimate","following", "received", "available", "before", "aimed", "collected", "often", "often","include","relevant","having","therefore","because","thus", "gutenberg","almost", "license", "ebook", "anyone", "anywhere", "title", "author", "enough", "nothing", "cannot", "really", "never", "again", "wwwgutenbergorg", "whatsoever", "editor", "chapter","perhaps", "shall", "every","where", "been", "more", "than", "even", "with", "what",  "who", "when", "only", "your", "into", "in", "on", "always", "online", "copy", "away", "back", "myself", "still", "from", "figure", "over", "such")

Bu kısımda aşağıda yazılan kod bloğundaki satırlarda sırasıyla;

  • Metindeki harflerin tamamı küçük harfe dönüştürülmüştür.
  • Metindeki noktalama işaretleri kaldırılmıştır.
  • Metinle iç içe geçmiş (kızgın325 gibi) rakam ve sayılar metinden ayıklanmıştır.
  • Metinden rakam ve sayılar çıkarılmıştır.
  • Yukarıdaki belirtilen kelimeler metinden çıkarılmıştır. Burada dikkat edilirse çıkarılan kelimeler daha çok zamir, sıfat, edat ve bağlaçlardır. İsteğe bağlı olarak burada değişiklikler yapabilirsiniz.
  • Karakter sayısı 3’ten büyük kelimeler filtrelenmiştir. İsteğe bağlı olarak burada değişiklikler yapabilirsiniz.
  • Metin istenmeyen formatta kelimeler varsa ve bu kelimeleri çıkarmanız analize zarar verecekse yerine kelimeler atayabilirsiniz.
  • Metnin değişiklikler sonrası “tibble” tablo düzenine dönüştürülmüştür.
tr<-rp %>% mutate(word=str_to_lower(cumle))%>% unnest_tokens(word, cumle) # Metindeki harflerin tamamı küçük harfe dönüştürülmüştür.
tr<-tr %>% mutate(word=removePunctuation(word)) # Metindeki noktalama işaretleri kaldırılmıştır.
tr<-tr %>% mutate(word=str_squish(word)) # Metinle iç içe geçmiş (kalem325) rakam ve sayılar metinden ayıklanmıştır.
tr<-tr %>% mutate(word=removeNumbers(word)) # Metinden rakam ve sayılar çıkarılmıştır.
tr<-tr %>% filter(!word %in% rmv1) # Yukarıdaki belirtilen kelimeler metinden çıkarılmıştır. Burada dikkat edilirse çıkarılan kelimeler daha çok zamir, sıfat, edat ve bağlaçlardır. İsteğe bağlı olarak burada değişiklikler yapabilirsiniz.
tr<-tr %>% filter(str_length(word)>3) # Karakter sayısı 3'ten büyük kelimeler filtrelenmiştir. İsteğe bağlı olarak burada değişiklikler yapabilirsiniz.
tr<-str_replace(tr$word, "[ı]", "i") # Metin istenmeyen formatta kelimeler varsa ve bu kelimeleri çıkarmanız analize zarar verecekse yerine kelimeler atayabilirsiniz.
tr<-str_replace(tr$word, "emdes", "emde") # Metin istenmeyen formatta kelimeler varsa ve bu kelimeleri çıkarmanız analize zarar verecekse yerine kelimeler atayabilirsiniz.
rpc<-tr %>% as_tibble() %>% rename(word=value) # Metnin değişiklikler sonrası tibble tablo düzenine dönüştürülmüştür.
rpc

Kelime sıklıklarının ortaya konulması

Aşağıda yazılan kod bloğunda metindeki kelimelerin sıklıkları bulunmuş, ardından ise frekansı en yüksek ilk 100 kelime verilmiştir. En sonda ise kelimeler ve frekansları xlsx uzantılı Microsoft Excel çalışma kitabına yazdırılmıştır. Veri setindeki yeni gözlem sayısı 68,142’dir. Yani xlsx uzantılı çalışma kitabında 68,142 satır bulunmaktadır. Bu yüzden çalışma kitabını açarken biraz beklemeniz gerekebilir.

sayi<-rpc %>% group_by(word) %>% count() %>% arrange(desc(n))
sayi<-sayi %>% add_column(id=1:NROW(sayi),.before = "word")
sayi

#Frekansı en yüksek ilk 100 kelime
sayi %>% head(100)  %>% pander(caption="Frekansı En Yüksek İlk 100 Kelime")

#xlsx uzantılı çalışma kitabına sıklıklarına göre kelimelerin yazdırılması

write_xlsx(sayi, "kelimelerrapor.xlsx")

Yukarıdaki kod bloğunda ikinci alt blok çalıştırıldığında elde edilen frekansı en yüksek ilk 100 kelime aşağıda verilmiştir. Raporda frekansı en yüksek ilk 4 kelime sırasıyla “growth”, “emde”, “bank”, “pandemic” kelimeleridir. emde kelimesi gelişmekte olan ve gelişmiş ekonomilerin kısaltmasıdır.

----------------------------
 id        word         n   
----- --------------- ------
  1       growth       1108 

  2        emde        922  

  3        bank        716  

  4      pandemic      704  

  5       global       628  

  6        world       626  

  7       percent      578  

  8        debt        570  

  9      economies     563  

 10       policy       523  

 11      economic      487  

 12      countries     426  

 13       covıd       407  

 14      financial     400  

 15        asset       381  

 16     investment     379  

 17       fiscal       372  

 18       market       326  

 19        term        324  

 20      monetary      281  

 21      advanced      276  

 22        long        276  

 23       output       275  

 24      expected      270  

 25      purchase      265  

 26       central      252  

 27     washington     231  

 28     government     225  

 29   ınternational   225  

 30       average      222  

 31       prices       222  

 32      programs      217  

 33       capital      216  

 34      forecasts     212  

 35      recovery      212  

 36       income       190  

 37    productivity    187  

 38       effects      185  

 39       economy      181  

 40      potential     177  

 41      emerging      173  

 42       reform       173  

 43      activity      172  

 44       support      169  

 45       january      167  

 46        some        167  

 47      prospects     166  

 48       country      158  

 49     developing     158  

 50        asia        156  

 51      measures      156  

 52        paper       154  

 53        risk        154  

 54       crisis       153  

 55     development    152  

 56      forecast      150  

 57       africa       148  

 58      purchases     147  

 59       working      147  

 60       reforms      146  

 61        bond        144  

 62        risks       143  

 63        labor       141  

 64        large       141  

 65       region       137  

 66      policies      136  

 67        last        134  

 68       capita       133  

 69      increase      133  

 70       outlook      133  

 71       public       133  

 72       markets      130  

 73        trade       125  

 74       decade       124  

 75        fund        120  

 76    announcements   118  

 77       crises       116  

 78     percentage     115  

 79      projected     113  

 80      exchange      112  

 81        here        112  

 82      inflation     112  

 83       yields       110  

 84        note        109  

 85      economics     108  

 86       health       108  

 87       impact       108  

 88       levels       107  

 89        south       107  

 90        lıcs       106  

 91        cases       105  

 92       losses       104  

 93       change       103  

 94      includes      103  

 95       sector       102  

 96       demand       100  

 97      education     100  

 98      episodes      100  

 99       private      100  

 100      remain       100  
----------------------------

Table: Frekansı En Yüksek İlk 100 Kelime

Yukarıdaki kod bloğunda üçüncü alt blok çalıştırıldığında elde edilen kelimeler ve frekansları xlsx uzantılı Microsoft Excel çalışma kitabına yazdırılmış olup aşağıda linkten indirebilirsiniz.

Kelime bulutlarının oluşturulması

Bu kısımda wordcloud2 kütüphanesini kullanarak aşağıdaki kod bloğunda verelim. Burada aynı zamanda oluşturulan kelime bulutu png ve html uzantılı olarak da kaydedilmektedir. Aşağıda yazılan kod bloğunda en yüksek frekansa sahip ilk 350 satırdaki kelimelerin frekansı ele alınmıştır. Dilerseniz wordcloud2 fonksiyonu içerisindeki parametreleri değiştirerek farklı alternatifler deneyebilirsiniz.

sayi<-rpc %>% group_by(word) %>% count() %>% arrange(desc(n))
sayi<-sayi %>% add_column(id=1:NROW(sayi),.before = "word")

#kelime bulutunun oluştuurlması
rp <- wordcloud2(head(sayi[,2:3], 350), size=1, minSize = 10, color = "random-light",backgroundColor = "dark", shape = "circle")

#html ve png olarak kaydedilmesi
saveWidget(rp,"28.html",selfcontained = F)
webshot::webshot("28.html","rp.png",vwidth = 1800, vheight = 1000, delay =10)

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde ettiğimiz kelime bulutu aşağıda verilmiştir.

Duygu analizlerinin yapılması

Bu kısımda Loughran dil sözlüğü kullanılarak duygu analizi yapılmıştır. Loughran leksikonunda kelimeler altı duygu kategorisinde ele alınır: “olumsuz”, “pozitif”, “ihtilaflı”, “belirsizlik”, “kısıtlayıcı” veya “gereksiz” (“negative”, “positive”, “litigious”, “uncertainty”, “constraining”, or “superfluous”). Loughran leksikonu bulguları aşağıda yazılan kod bloğu ile elde edilmiştir.

#Loughran leksikon değerlerinin elde edilmesi
l2<-rpc %>% inner_join(get_sentiments("loughran"),by="word")
 
#Duygu grubuna göre frekanslar
l2 %>% group_by(sentiment) %>% summarise(toplam=n()) %>% mutate(oran=round(toplam/sum(toplam)*100,2)) %>% arrange(desc(oran)) %>% formattable()

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Loughran leksikonu tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Aşağıda verilen bulgudan şu sonuç çıkarılmalıdır: %57,70 ile negatif duygunun 2021 Küresel Ekonomik Beklentiler (Global Economic Prospects) raporunun genelinde baskın olduğu görülmektedir. Metinde negatif duyguyu pozitif ve belirsizlik duyguları izlemiştir. Aslında duygu analizi bulguları, dünya ekonomisinde yaşanan durumu da ortaya koymaktadır.

Loughran leksikonu sonuçları aşağıda yazılan kod bloğu ile grafik üzerinde de verebiliriz.

l2 %>% 
group_by(sentiment) %>% summarise(n=n())%>%
ggplot(aes(reorder(sentiment, n), n, fill=sentiment)) +
geom_bar(stat="identity", show.legend = FALSE)+
geom_text(aes(label=n), vjust=-0.3, size=3.5)+
labs(y = "Frekans", x = "Duygu")+
theme_economist_white()+
labs(caption = "Veri: Global Economic Prospects adlı 2021 raporundan Tevfik Bulut tarafından analiz edilmiştir.")+
theme(plot.caption = element_text(hjust = 0, face = "italic"))

Yukarıdaki kod bloğu çalıştırıldığında Loughran leksikonuna göre 2021 Küresel Ekonomik Beklentiler raporundan elde edilen duygular aşağıdaki grafikte verilmiştir.

Duygu sözlükleri içerisinde duygu kategorisine filtreleme yapmak oldukça kolaydır. Örnek teşkil teşkil etmesi adına Raporda Loughran leksikonuna göre negatif olarak etiketlenen kelimelerden ilk 50’sini aşağıda yazılan kod bloğu ile verelim. Dilersek pozitif olarak etiketlenen kelimelerin tamamı elde edebilir ve xlsx uzantılı çalışma kitaplarına yazdırabiliriz. Benzer işlemleri diğer dil sözlüklerinde de gerçekleştirebiliriz.

l2 %>% filter(sentiment=='negative') %>% head(50) %>% pander(caption="Negatif olarak etiketlenen ilk 50 kelime")

Yukarıdaki kod bloğunun çalıştırılmasından sonra metinde negatif olarak etiketlenen ilk 50 kelime aşağıdaki tabloda verilmiştir.

-----------------------------
      word         sentiment 
----------------- -----------
     errors        negative  

    omissions      negative  

  discrepancies    negative  

     failure       negative  

   limitation      negative  

   disclaimer      negative  

      error        negative  

   disclaimer      negative  

    infringe       negative  

     claims        negative  

  infringement     negative  

    critical       negative  

    dangerous      negative  

 disappointments   negative  

      lost         negative  

   persistent      negative  

    deficits       negative  

   challenges      negative  

   challenges      negative  

   challenges      negative  

 disappointments   negative  

    weakness       negative  

   weaknesses      negative  

   downgraded      negative  

   downgraded      negative  

   downgrades      negative  

     crisis        negative  

   downgrades      negative  

     adverse       negative  

    dangerous      negative  

      lost         negative  

   persistent      negative  

    deficits       negative  

   challenges      negative  

    inaction       negative  

   challenges      negative  

     delayed       negative  

     crises        negative  

     damage        negative  

     adverse       negative  

     errors        negative  

     losses        negative  

    setbacks       negative  

    setbacks       negative  

   persistence     negative  

    setbacks       negative  

    setbacks       negative  

    setbacks       negative  

   devastating     negative  

   devastating     negative  
-----------------------------

Table: Negatif olarak etiketlenen ilk 50 kelime

Şimdide Loughran leksikonunda duygulara göre etiketlenmiş kelimelerin tamamını aşağıda yazılan kod bloğu ile verelim.

l2<-rpc %>% inner_join(get_sentiments("loughran"),by="word")
write_xlsx(l2, "rapor_loughranleksikonu.xlsx")

Yukarıdaki kod bloğunun çalıştırılmasından sonra Loughran leksikonundaki duygu kategorilerine göre etiketlenmiş metindeki bütün kelimeler xlsx uzantılı Microsoft Excel çalışma kitabına yazdırılmış olup aşağıdaki linkten indirebilirsiniz.

Loughran leksikonundaki duygu kategorilerine göre etiketlenmiş 50 kelimeyi olasılıklı örnekleme yöntemlerden biri olan ve önyargı (bias) içermeyen tekrarsız basit tesadüfi örnekleme yöntemi kullanarak seçmek için aşağıdaki gibi basit bir kod satırı yazalım.

set.seed(61) 
rpc %>% inner_join(get_sentiments("loughran"),by="word") %>% sample_n(50) %>% pander(caption="Basit Tekrarsız Tesadüfi Örnekleme Yöntemi İle Seçilen Kelimeler ve Duygu Etiketleri")

Loughran leksikonundaki duygu kategorilerine göre etiketlenmiş 50 kelime tekrarsız basit tesadüfi örnekleme yöntemi kullanarak belirlenmiş ve aşağıdaki tabloda verilmiştir.

-----------------------------
     word        sentiment   
-------------- --------------
   exposed        negative   

    crisis        negative   

   despite        positive   

   impaired     constraining 

 forbearance     litigious   

   friendly       positive   

 improvement      positive   

  deviation       negative   

  recessions      negative   

   greater        positive   

   whereas       litigious   

    crises        negative   

    gains         positive   

   success        positive   

    risks       uncertainty  

    crisis        negative   

  challenges      negative   

    risks       uncertainty  

    better        positive   

  effective       positive   

    risks       uncertainty  

    easing        negative   

   negative       negative   

  aggravate       negative   

    risks       uncertainty  

     poor         negative   

   require      constraining 

  discourage      negative   

  regulatory     litigious   

   advances       positive   

    damage        negative   

  aggravate       negative   

   stronger       positive   

    crises        negative   

  uncertain     uncertainty  

    crises        negative   

    sudden      uncertainty  

  excessive       negative   

 transparency     positive   

 forbearance     litigious   

    boost         positive   

  regulatory     litigious   

    severe        negative   

 probability    uncertainty  

    gains         positive   

     good         positive   

 difficulties     negative   

   despite        positive   

   advances       positive   

   adverse        negative   
-----------------------------

Table: Basit Tekrarsız Tesadüfi Örnekleme Yöntemi İle Seçilen Kelimeler ve Duygu Etiketleri

Dünya Bankasının raporu üzerinden sadece Loughran leksikonu kullanarak duygu analizi yapılmıştır. Burada 2. bölümde belirttiğim diğer duygu sözlükleri uygulama adımları kullanılarak diğer leksikonlara göre de duygu analizi yapılabilir.

4. Sentetik veriler üzerinden kelime bulutlarının oluşturulması

Örnek uygulama kapsamında son çalışma sentetik veriler üretilip kelime bulutlarının oluşturulmasıdır. Bu çalışma kapsamında sentetik olarak üretilen kelimelerin büyük bir çoğunluğu İstiklal Marşımızdan alınmıştır. Burada sentetik verilerin üretilmesinde tekrarlı örnekleme tekniği kullanılmış ve 10.000 gözlem üretilmiştir. Bu gözlemler üzerinde kelime bulutları oluşturulmuştur. Şimdi adım adım kelime havuzu oluşturup, ardından tekrarlı örnekleme tekniğini kullanarak 10000 gözlem üretelim. Ardından ise kelime bulutlarını oluşturalım. İlk olarak aşağıda yazılan kod bloğu ile vektör içerisinde kelime havuzumuzu oluşturalım.

#kelime havuzu oluşturma
havuz=c("anadolu", "türkiye", "vatan", "mehmetçik", "istanbul", "ankara", "başkent", "istiklal", "güvenlik","türk", "anıtkabir","fatih", "atatürk","ertuğrul", "diriliş", "lonca","kültür", "asker", "göktürk", "bağımsızlık", "zafer", "ulus","sancak","yurt","siper","hilal","hür", "toprak","millet","hürriyet","izmihlal", "ezan", "şüheda", "inklap","cumhuriyet", "bayrak", "şafak","iman", "medeniyet","ecdat","arş", "hür","hakk", "hüda","secde", "cüdâ", "şafak", "ay","yıldız", "bayrak")

Şimdi aşağıda yazılan kod bloğu ile tibble tablo düzeni içerisinde tekrarlı basit tesadüfi örnekleme yöntemiyle 10000 gözlemden oluşan bir tablo oluşturalım.

#tekrarlı örnekleme tekniği ile kelime tablosu oluşturma
set.seed(1299) # Aynı örneklem birimlerini almanız için sabitlenmiştir. 
orneklem= tibble(kelime=sample(havuz, size=10000, replace = TRUE))

Kelime tablomuzu oluşturduğumuza göre aşağıda yazılan kod bloğu ile kelimelerin sıklıklarını (frekanslarını) hesaplayabiliriz.

deneme<-orneklem %>% group_by(kelime) %>% count() %>% arrange(desc(n))
deneme<-deneme %>% add_column(id=1:NROW(sayi),.before = "kelime")
deneme

Kelime sıklık tablosunu oluşturduk. Şimdi sıra aşağıda yazılan kod bloğu ile kelime bulutlarını oluşturmaya gelmiştir. Aşağıda kod bloğunda kelime bulutunu hem png hem html olarak kaydedebilirsiniz. Size bu noktada bir tavsiye vereyim böyle bir durumda yani farklı formatta dosyaları aynı dosyaya kaydetmesi için R çalışma sayfasını çalışmaya başlamadan önce oluşturduğunuz bir klasör içerisinde açınız.

#kelime bulutunun oluşturulması
bulut1<- wordcloud2(head(deneme[,-1],150), size=0.5, color = "random-light", backgroundColor = "grey")

#html ve png olarak kaydedilmesi
saveWidget(bulut1,"bulut1.html",selfcontained = F)
webshot::webshot("bulut1.html","bulut1.png",vwidth = 1800, vheight = 1000, delay =10)

Yukarıdaki kod bloğunun çalıştırılmasından sonra sentetik verilerden ürettiğimiz kelime bulutu daire (circle) düzeninde aşağıda verilmiştir.

Son olarak aşağıda yazılan kod bloğu ile yıldız (star) düzeninde kelime bulutunu oluşturalım. Kelime bulutunda arka fonumuz kutsal bayrağımız rengi olan kırmızı, yıldızımız ise beyaz olsun.

#kelime bulutunun oluşturulması
bulut2<- wordcloud2(deneme[,-1], size=0.4, color = "white", backgroundColor = "red", shape="star", minRotation = -pi/6, maxRotation = -pi/6, rotateRatio = 1)

#html ve png olarak kaydedilmesi
saveWidget(bulut2,"bulut2.html",selfcontained = F)
webshot::webshot("bulut2.html","bulut2.png",vwidth = 1800, vheight = 1000, delay =10)

Yukarıdaki kod bloğunun çalıştırılmasından sonra sentetik verilerden ürettiğimiz kelime bulutu yıldız (star) düzeninde aşağıda verilmiştir.

“4. Sentetik veriler üzerinden kelime bulutlarının oluşturulması” başlığı altındaki bu çalışmayı yüce milletimize her koşulda hizmet eden şehit ve gazi kahraman Mehmetçiklerimize atfediyorum.

Yapılan bu özgün çalışmalar ile özellikle keşifsel veri analizi (exploratory data analysis), metin ve fikir madenciliği (text and opinion mining) alanlarına katkı sunulması amaçlanmıştır.

Veri bilimine gönül vermiş öğrenci, akademisyen ve saha çalışanlarına faydalı olması dileğiyle.

Bilimle ve teknolojiyle kalınız.

Saygılarımla.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

Öne çıkan

R’da Metin Madenciliği Üzerine Vaka Çalışmaları: Case Studies on Text Mining in R

Veri madenciliğinin (data mining) bir kolunu oluşturan metin madenciliği (text mining) metotları, metinlerde en sık kullanılan anahtar kelimeleri vurgulamamıza ve görselleştirmemize olanak tanır. Bu metotlarla metin verisinden metin bulutu, etiket bulutu diyebileceğimiz kelime bulutu oluşturulabilir. Kelime bulutları metni hızlı analiz etmemize ve kelime bulutu olarak ortaya çıkan anahtar kelimeleri görselleştirmemize olanak tanır.

Bahsedilenler ışığında metin verisini sunmada kelime bulutunu kullanmanız gerektiği durumlar şunlardır:

  1. Kelime bulutları sadelik ve yalınlık sağlar. En sık kullanılan anahtar kelimeler, kelime bulutu içinde daha iyi kendini gösterir.
  2. Kelime bulutları potansiyel iletişim araçlarıdır. Kelime bulutlarının anlaşılması, paylaşılması kolaydır ve kelime bulutları etkilidirler.
  3. Kelime bulutları bir tablo verisinden görsel olarak daha ilgi çekicidir.

Kelime bulutları, sektör ayrımı gözetilmeksizin bütün alanlarda kullanılabilmekle birlikte en sık kullanılan alanlarla en sık kullanılan meslek grupları şöyle özetlenebilir;

  1. Kalitatif (nitel) araştırma yapan araştırmacılar,
  2. Müşterilerin ihtiyaçlarının belirlenmesi noktasında pazarlamacılar,
  3. Temel konuları desteklemek için eğitimciler,
  4. Politikacı ve gazeteciler
  5. Kullanıcı görüşlerini toplayan, analiz eden ve paylaşan sosyal medya siteleri

Bugün daha önce R programlama dili kullanarak R Shiny üzerinde geliştirdiğim metin madenciliği (text mining) web uygulamasından bahsedeceğim. İlk olarak sade bir tasarıma sahip geliştirdiğim metin madenciliği uygulamasının 3. versiyonunun linkini vererek işe başlayayım. Aşağıdaki linkten bu uygulamayı açabilirsiniz.

Metin Madenciliği Uygulaması

Uygulama ile boyut, büyüklük ve dil sınırı olmaksızın bütün metinlerin kelime bulutunu oluşturabilirsiniz hem de farklı tasarım varyasyonları ile birlikte. Versiyon 3’te ilave olarak uygulamanın arka planında Türkçe ve ingilizce dillerinde metinden çıkarılacak edat ve bağlaçlarının sayısı artırılarak kullanıcının veri temizleme (data cleaning) işlemi kısaltılmak istenmiştir. Burada adım adım uygulamadan bahsedildikten sonra örnek bir metin üzerinden gidilerek kelime bulutu oluşturulacaktır.

Aşağıda uygulaması ve anlaşılması kolay olabilmesi adına oldukça sade ve fonksiyonel tasarımla geliştirilen uygulamanın ekran görüntüsü verilmiştir. Aşağıdaki uygulama ekran görüntüsünde sol panelde sırasıyla Metni giriniz, Kelime sıklığı, Maksimum kelime sayısı, Renk seçiniz, Kelime bulutu oluştur sekmelerini görüyorsunuz. Sağ panelde ise Kelime Bulutu alanına ve altında uyarı metinlerine yer verilmiştir. Dilerseniz sırasıyla kısaca sol panel alanlarından bahsedelim.

Sol panel sekmeleri

  1. Metni giriniz: Bu alana kopyalanan metin girilmektedir. Yani bu alana kopyala-yapıştır (copy-paste) yapmanız yeterlidir. Metni giriniz sekmesindeki metin kutucuğu sağ alt köşeden genişleyebilmekte ve girdiğiniz metnin tamamını bu sayede daha rahat görebilirsiniz. Bu kutucu metin verisi girildiğinde sağ panelde yer alan “Uyarı 1: Metin alanı boş geçilemez” uyarı metni ortadan kalkacaktır.
  2. Kelime sıklığı: Metni giriniz sekmesinde yer alan kutucuğa metin verisi girildikten sonra sıra kelime sıklıklarını belirlemek gelmektedir. Bu sekmede mouse ile 0’dan büyük olacak şekilde kelime sıklığı belirmememiz gerekir. Aksi takdirde bildiğiniz üzere 🙂 kelime bulutu oluşmaz. Kelime sıklığı 0’dan büyük olduğunda sağ panelde yer alan “Uyarı 2: Kelime sıklığı 0’dan büyük olmalıdır” uyarı metni ortadan kalkacaktır.
  3. Maksimum kelime sayısı: İlk iki sekmelere yani Metni giriniz ve Kelime sıklığı sekmelerine istenen şekilde metin verisi girildikten sonra sıra “Maksimum kelime sayısı” nın belirlenmesine gelmektedir. Maksimum kelime sayısı 0’dan büyük olduğunda sağ panelde yer alan Uyarı 3: Maksimum kelime sayısı 0’dan büyük olmalıdır uyarı metni ortadan kalkacaktır. Böylece Uyarı 3 ile birlikte diğer uyarılar da hep birlikte ortadan kalkacaktır. Buraya anlatılanlar kelime bulutu oluşturulması için yeterlidir. Bu aşamadan sonra Kelime bulutu oluştur butonuna tıklayarak kelime bulutu oluşturabilirsiniz. Oluşturduğunun kelime bulutu sağ panelde Kelime Bulutu başlığı altında yer alacaktır.
  4. Renk seçiniz: Bu sekme daha çok kelime bulutunun tasarımı yani rengi ile ilgili olup, zorunlu değildir. Default (otomatik) olarak belirlenen renk üzerinden doğrudan kelime bulutu elde edilebilir. Ancak çok daha seçenek sunulması ve daha estetik bir görünüm elde edilebilmesi adına bu sekmeyi uygulamaya entegre ettim. Renk ölçeğinin üzerine tıkladıktan sonra ileri-geri ilerleyerek dileğiniz renge göre kelime bulutu elde edebilirsiniz.

Örnek Uygulamalar

a) İngilizce Metinlerde Uygulama

Örnek uygulama kapsamında metin verisi 30.01.2021 tarihinde ücretsiz e-kitapların çeşitli formatlarda yayınlandığı https://www.gutenberg.org/ebooks/50540 adresinden alınmıştır. Metin verisi olarak alınan eserin adı Zeyneb Hanoum tarafından kaleme alınan Bir Türk Kadınının Avrupa İzlenimleri (A Turkish Woman’s European Impressions)‘dır. Eser 23 Kasım 2015 tarihinde https://www.gutenberg.org sitesinde yayınlanmıştır. Bu metin verisi ile yukarıda linki verilen web uygulaması üzerinden kelime bulutları oluşturulacaktır. Aynı zamanda metni word formatında aşağıdaki linkten indirebilirsiniz.

  1. İlk uygulama parametrelerimiz şöyle olsun: Default renk seçeneği ile kelime sıklığı 524, maksimum kelime sayısı ise 83 olsun. Bu durumda kelime bulutumuz aşağıdaki gibi olacaktır. Kelime bulutu uygulaması içerisindeki algoritma kelimeleri random atadığı için aynı kelime düzenini elde edemeyebilirsiniz. Bunu burada belirtmek gerekir. Uygulamada kelime üzerine tıkladığınızda ilgili kelimenin metinde ne kadar sıklıkla kullanıldığını görebilirsiniz.

2. İkinci uygulama parametrelerimiz şöyle olsun: #00FFC4 renk seçeneği ile kelime sıklığı 403, maksimum kelime sayısı ise 50 olsun. Bu durumda kelime bulutumuz aşağıdaki gibi olacaktır.

b) Türkçe Metinlerde Uygulama

Bu kısımda Atatürk’ün Dehâsı, Davranışları ve Çalışma Biçimleri adlı makale analiz edilerek kelime bulutu oluşturulmuştur. Metin 30.01.2021 tarihinde Milli Eğitim Bakanlığı’nın http://meb.gov.tr/ataturk/Makaleler adresinden alınmıştır. Uygulamada kullanılan metin aşağıda verilmiştir.

Dehâ ve dâhi kavramı türlü biçimlerde ele alınmış ve tarif edilmiştr. Bunların başlıcalarını anıyoruz.
a) Doğuştan olağanüstü işler görmek ve eserler yaratmak kabiliyetinde olmak, yani olağanüstü yaratıcı bir dimağ taşımak.
b) Herkesten çok önce anlamak görmek, sezmek, kavramak, duymak ve duygulanmak.
c) Anlaşılması ve anlatılması imkânsız olan doğuştan büyüklük ve ululuk.
d) İnsanlığın gelişmesi sırasında ulaşabileceği en yüksek zirveleri görüp göstermek ve topluluğu oraya götürecek olağanüstü yaradılışta olmak.
e) Bazıları dehâyı uzun bir sabır diye tarif etmişlerdir.
f) Bir akşam sofrada (1926 yazı) dâhinin tarifi yapılır ve herkes bir görüş ortaya atarken, Atatürk şunu demiştir: 'Dâhi odur ki, ileride herkesin takdir ve kabul edeceği şeyleri ilk ortaya koyduğunda herkes onlara delilik der.'
Atatürk'ün taşıdığı vasıflar, bu tariflerin hepsine ayrı ayrı uyar. Onun dehâsının belirtilerini incelersek şunları görürüz. O, olağanüstü seziş, kavrayış ve duyuş hassalarına şu yönleri de eklerdi:
Ortaya çıkması muhtemel konu, sorun ve olayları çok önceden tahmin edip, onlar üzerinde derinden derine dimağını işletir, en kötü ihtimallere kadar her şeyi gözönünde bulundurarak gereken tedbirleri kararlaştırır ve durumun ilerdeki gelişme derecelerine göre bunları kafasında sıralardı. Amaçlarını iyice tesbit ederdi; kafasında hiç dağınıklığa yer vermezdi ve hiç bir olay onu boş bulmazdı.

Yukarıda Çanakkale vuruşmaları sırasında onun bu gibi davranıp ve görüşlerine rastladık. 6 Ağustos 1915 de başlayan İngiliz saldırıları dolayısiyle iki ay önce uyarılmaya çalışmış olduğu Liman von Sanders ve Esat Paşalar için: '... fikren hazırlanmamış oldukları harekât-ı hasmane karşısında pek nakıs tedbirlerle vaziyet-i umumiyeyi ve vatana pek büyük tehlikeye maruz bıraktıklarına vakayı şahit oldu' diye yazmıştır. İmlediğimiz üç kelime Mustafa Kemal'in büyük önem verdiği bir yönü aydınlatmaktadır.
Conkbayırı'nın geri alınması sorunu dolayısiyle O, şunu yazmıştır: 'Muharebede kuvvetten ziyade, kuvveti maksada muvafık sevk ve idare etmek mühim olduğu düşünülmüyordu.'

Yine bu Conkbayırı işinde kendisi üst ve alt makamlardakilerin inançlarına aykırı davranmaya karar vermesini izahı için şunları yazmıştır: 'Bazı kanaatler vardır ki onların hesap ve mantıkla izahı pek güçtür. Bahusus muharebenin kanlı ve ateşli safhasında duyguların tevlit ettiği kanaatler... Bittabi her kanaat ve karar, içinde bulunulan ahval ve şerait tetkik ve bu tetkikat netayicini teferrüs (sezmek) ve takdir sayesinde tevellüt ener.'

Başarı onun dehâsının verdği 'sezme' gücünün sonucudur. Ancak O, bunun da, durumu tetkike ve ona göre karar vermeye bağlı olduğunu açıklamaktadır. Yani doğuştan olan 'seziş' kabiliyetine ek olarak dimağı çalıştırmanın esas olduğunu belirtmektedir.

Atatürk'ün pek çok karar ve davranışları uzun inceleme ve düşüncelerin sonucu olmakla birilikte ani olaylar karşısında çarçabuk en uygun yolu seçmekte büyük kabiliyeti vardı. Arıburnu'nda ve Conkbayır'ındaki davranışları buna örnektir. Atatürk önem verdiği güç ve sıkıcı bir durumu çözdükten sonra rahatlardı ve bu yüzünden belli olurdu. Bu gibi durumlarda 'beynime saplanmış bir çiviyi söküp attım' dediği olmuştur.

Atatürk'ün çalışma tarzının bir önemli yönü de kendine öz bir danışma yolu seçmiş olmasıdır. O, böyle davranmakla hiç geriye doğru adım atmak zorunda kalmadan en şaşılacak devrimleri ve ileriye atılışları gerçekleştirmiştir. Pek çokları sanarlar ki Atatürk gerçekleştireceği devrimlere ve daha genel olarak göreceği önemli işlere birden bire ve kendi başına karar verip onları yürütürdü. Gerçektense onun demin dediğimiz gibi kendine öz bir danışma yolu vardır. Yapmak istediğini önce, bazen işin esasını pek belli etmeden ve nazari bir şey üzerinde konuşuyormuş gibi, sofrada söz konusu ederdi, içki ağızları daha kolay açtığı için leh veya aleyhte söyleyenler olurdu, konuşanların özel düşünce ve inançlarını bildiğinden söylediklerini ona göre değerlendirirdi. Bazı arkadaşlariyle ve halkla temaslarında, köylü ve kentli her türlü iş güç sahipleriyle konuşurken yine pek belli etmeden tasarısının uyandıracağı tepkiler üzerinde bilgi ve duygu edinirdi. Yalnız aldığı karşılıklardan değil, konuştuğu adamın yüzünden ve kımıltılarından da sonuçlar çıkarırdı. Böylelikle tasarladığı devrimin veya herhangi önemli işin nasıl bir tepki göreceğini ne ölçüde kolaylık veya güçlükle karşılaşacağını anlamış olur ve ona göre davranırdı.

Özet olarak; dehâsı onu olağanüstü ve başka kimsenin yüreklenmeyeceği işleri görmeğe iterken O, çok esaslı psikolojik ve sosyal yoklama ve incelemelere girişmeden önemli hiç bir adım atmazdı. Bazen onun en yakınları arasında bile kendi gözleri önünde yapılmış olan bu yoklama ve çalışmaların anlamını sezmediklerinden atılan adımların delice ve tek başına alınmış kararların sonucu olduğunu sananlar bulunurdu. Bunun aksine olarak da onun bu yoklama usullerini bilmeyenler veya anlayacak kabiliyette olmayalar yapılan tartışmalar sırasında kendi savundukları görüşe uygun bir karar uygulanırsa kerameti kendilerinde sanmış ve Atatürk öldükten sonra söz veya yazı ile övüntülerde bulunmuşlardır. Bazen de bu gibi övünmeler büsbütün uydurma olaylar üzerine yapılmıştır.

Atatürk göreceği işin eski deyişle 'eşref saatte' yapılmasına da çok önem verirdi. Ancak onun eşref saatini falcı veya müneccim değil, durumun derinden derine incelenmesinden doğan inanç tesbit ederdi. Yukarda anılan yoklama ve danışmalar da bu anın tesbitinde rolü büyüktü. Elde edilen bir başarıdan azami verimi elde etmesini bildiği gibi nerede durulması gerektiğini de iyice tesbit etmesini bilirdi.

Bu yazdıklarımız bazılarınca Atatürk üzerinde beslenen bir sanıyı da düzeltmeye yarar. Sanılır ki; O, hiç itiraz kabul etmez ve kimse onula tartışmaya yüreklenemez. Bu sanı baştan başa yanlıştır. O, tartışmaların kızışmasını, hele o işten anlayanların ne olursa olsun konuşmalarını, isterdi ve bunu yapmayanlara kızardı, 'bilir, ancak bildiğini ortaya koymaz, ne yapayım böyle adamı' dediği olurdu. Şu kadar var ki tartışmalarda içtenlik şarttı; içten olmayarak ayrıca gizli düşünceler besleyerek, fesat ve tezvir için konuşanlara ise kızardı. Atatürk türlü yoklama ve tartışmalardan sonra bir karara vardı mıydı onu her ne olursa olsun yürütürdü. Uzun tartışmaların bir faydası da görülecek işin uygulanmasiyle görevlendirilecek olanların onun bütün yönlerine nüfuz etmelerini sağlamaktı. Atatürk buna çok önem verirdi. Tartışmalar ayna zamanda kararlaştırılan işe bir çok yanıt sağlamaya da yarardı. Ondaki azim ve irade de olağanüstü idi. Yenemeyeceği hiç bir güçlük, deviremiyeceği hiç bir engel yoktu. Her engeli sabır, tedbir veya zor ile yenerdi. Sakarya vuruşmasiyle Ağustos 1922 deki son büyük saldırı arasındaki süre içinde Mecliste pek çok ve acı tenkitlere uğramış, parasızlık ve türlü imkânsızlıklar yüzünden ordunun artık ayakta tutulamayacağı söyleniledurmuştu. O sıralarda Meclisin bir kapalı oturumunda, şunları söylemiş olduğu dışarda duyulmuştu: 'Para var ordu var, para yok ordu yok. Ben böyle şey bilmen para olsa da olmasa da. ordu olacaktır.'
1919'daki yıkımlı durumdan 1922 parlak zaferini çıkaran etkenlerin başında Türk azim ve iradesini temsil eden Atatürk'ün bu azmi ve iradesi bulunmaktadır.

Atatürk'ün çalışma ve yorgunluğa dayanıma kabiliyeti de olağanüstü idi. Sakarya vuruşmasında üç kaburga kemiği kırık olarak bir koltuğa mıhlanmış ve hemen hiç uyumadan yirmi iki gün yirmi iki gece vuruşmayı yöneltmiştir. 1927 de okuduğu büyük Nutuk'u hazırlarken de dosyalar içinde aylarca sabahladığı olmuştur.

Yukarda yazdıklarımız O'nun çok hesaplı oluğunu gösterir. Boş gösterişden ve övünmelerden , cafcadatan hiç hoşlanmazdı, ancak kesin lüzum görürse lüzumsuz sanılabilecek kahramanlıklarda bulunurdu.
Bu gibi duyguları dolayısiyledir ki yukarda anılan 'Vatan ve Hürriyet' Cemiyeti kurulurken ölmekten bahsedenlere, amacın ölmek değil yaşamak ve yaşatmak olduğunu söylemişti.

Ankara'da daha çok, ilk devirlerde, henüz nüfuzu pek kökleşmemiş iken tasarladığı bazı işleri bir takım tartışmalar sonucunda başka birine, o kimseyi tasarının kendi öz düşüncesi olduğuna içten inandırarak ileri sürdürürdü ve kendisi gerekirse onu desteklemekle yetinirdi. Bazen de tasarladıklarını onlara karşın olan birine önertmeği şaşılacak biçimde becerirdi. Bir takım devlet adamları vardır ki karar verirken yurttan önce o işte kendi çıkarlarını düşünür ve ona göre bir yol tutarlar. Bu yüzden çok kere isabetsiz bir yola girilir ve bunun sonucunda, kendini zeki sanan açık göz devlet adamı da, yurt işlerinin kötü gidişinden manen ve maddeten zarar görür. Atatürk kesin olarak bu gibi küçüklüklerin üstünde kalmış ve daima yurt için ve güdülen dâva için en gerekli yolu tutmuştur. Bunun sonucunda da kendi mevkii yurdunki gibi daima ve adeta otomatik biçimde yüksele durmuştur. Bu yön başka bir biçimde ifade edilmek istenilirse denilebilir ki: Atatürk daima kendi çıkarını yurt ve ulusun çıkariyle birleştirmeyi ve birlikte yürütmeyi bilmiştir.

Gerçek dâhi eğer dâvasını içtenlikle benimsemişse diktatör olmaya muhtaç değildir, çünkü bir dâhi doğru yolu göstermek ve onun doğruluğuna inandırmak gücünü kendinde görmeli ve bulmalıdır. Atatürk'ün yanında bulunmuş ve çalışmış olanlar aylar ve yıllar boyunca onunla tartıştıktan sonra sonuçta onun düşüncelerinin daima yerinde ve yararlı olduğunu göre göre onun en isabetli yolu seçeceğine o derece inanmışlardır ki her şeyde ona uymayı gerekli bilmişlerdir. Dolaysiyle eğer Atatürk'e diktatör denilecekse bu, onun üstün görüş ve anlayışına olan inançtan doğan uysallığın doğurduğu diktatörlük sayılmalıdır. Olayların daima kendisini haklı çıkarmasından ona karşı doğmuş olan güvene, onun pek büyük olan inandırma kuvvet ve kabiliyetinin de yanındakiler üzerindeki etkisini eklemek gerekir. Ancak şu yönü de belirtmeliyiz: Atatürk yalnız bir konuda genel serbest tartışmaya izin vermemiştir. O da dinin riyakarane sömürülmesi konusudur. Bir tedbirin yurt ve ulusun yarar veya zararına olduğu konusu üzerinde tartışılırken herhangi bir kimse veya parti bunu bilim, siyasal, hukuk ve saire bakımından inceleyeceğime o yönleri bırakıp halka açıkça veya el altından 'bu yapılırsa cehennemde cayır cayır yanarsın' cinsinden telkinlerde bulunursa bu gibileriyle akıl ve mantık yolundan giderek tartışarak hak kazanmak doğal olarak ka'bil olamazdı. Buna göz yumulunca da Türkiye devletini Osmanlı'nın uğradığı yıkımdan kurtarmanın imkânı kalmazdı. Bir zamanlar basımevleri, modern bilimler, yeniçerilere yeni silâhların gerektirdiği talimler şeriate aykırı gösterilmiş ve baştakilerle halk cehennem azabiyle korkutularak bu yenilikler yüzyıllar boyunca Osmanlı ülkesine sokulmamıştı. Bu yüzden de XVI ncı yüzyılın en güçlü devleti her bakımdan geri bırakılıp git gide sönmüş ve bir hiç olmuştu.
Atatürk'ün diktatörlüğü ancak ve ancak bu yönde kendini göstermiş ve tek parti usûlü, filî bakımdan, ancak ve ancak bu yüzden kurulup yaşamıştır.
İlerde göreceğimiz gibi Kâzım Karabekir'in ve daha sonra Fethi Okyar'ın başkanlık ettikleri partiler, baştakiler istemeseler bile, hep bu gibi dini dünya işlerinde gericilik uğrunda kullananların desteğine mazhar oldukları için kapanmışlardır.

Birinci Büyülk Millet Meclisi'nde O'nun ne kadar çetin saldırılarla karşılaştığı ve en 'parlamanter' bir başbakan gibi uğraşmak zorunda kaldığı düşünülürse dünya ve devlet işleri 'ahiret' tehdidi altında görülmeye kalkışılmadıkça O'nun hiç bir muhalefetten çekinmeyeceğini anlarlar.

Atatürk hem doğuştan, hem de çok akıllı ve hesaplı olduğundan doğru ve vefalı olmaya, kimseyi aldatmamaya, özet olarak güven sağlamaya büyük önen verirdi. Aksini ileri sürenler ve ondan vefasızlık gördüklerini söyleyenler, bunu ya düşmanlıklarından yaparlar veya Atatürk'ün görerek edindiği uyarılarını anlayamamış, yahut da onlara önem verip aldırmamış olduklarından böyle bir sonuçla karşılaşmışlardır. Buna karşılık Atatürk kendisini bile bile aldatmış olanları mimler ve bir daha onlara güvenmezdi. Ancak taşıdığı yüksek duyguları, meselâ ölümünden az önce, yüzellilikleri affettirmekle göstermiştir. Biliyordu ki kendisinden sonra kimse bu işe yüreklenemezdi ve onbeş yıllık sürgünü yeter bulmuştu.

Atatürk mahiyetindekilerin sorumlu oldukları işlere karışmaktan ve ayrıntılarla uğraşmaktan sakınır, bazen bunu yapsa da dostçasına yapardı, 'işi mesulüne bırakalım' sözünü kendisinden çok işittim. Keza bir bakan onunla danışırsa düşüncesini söylemekle birlikte 'ben böyle düşünüyorum amma işin sorumlusu sensin, ona göre düşün, taşın ve karar ver' derdi.
Ancak çok önemli işlerde ve anlarda bütün ayrıntılara bile el koyduğu ve hemen her şeyi kendisi yaptığı görülmüştür. Conkbayır'ı geri alırken veya 1922 Ağustos'unda başlayan büyük saldırıyı yöneltirken böyle yapmıştır. Bunu yaparken de başarının şerefini yine mahiyetine bırakacak biçimde davranmak büyüklüğünü göstermiştir. Bu gibi durumlar dışında genel bakımdan işlere karışmayı sevmez ve herhangi bir (kolda işler iyi gitmezse bazen dediği gibi 'baştakini değiştirmekle' yetinirdi. Hemen bütün yeni çığırlara onun 'inisiyatif'i ile girilmiş olmakla birlikte o yeni bir işi yoluna koyduktan sonra onun devam ettirilmesini bir ehline bırakmayı görenek edinmişti ve bunu yapınca içi rahat ederdi.

Genel olarak O, başka birinin görebileceği bir işi kendi üzerine almaz veya üzerinde tutmazdı. Pek çok iktidar sahibinde görülen ve onları yanlış yollara iten bir zaaf Atatürk'de yoktu. Birisi aleyhinde bir söz söylenildi miydi
onu söyleyen ne kadar yakını ve güvendiği biri olursa olsun ona inanmadan önce işi yansız bildiği bir veya bir kaç kişiye inceletir, ondan sonra bir karara varırdı. Eğer söyleyen ve aleyhinde söylenilen kimselerin ikisi de yakını ise onları yüzleştirir ve edindiği duygulara göre bir inanca varırdı. Bu yüzden Atatürk'ün yanında iftira ve tevzir makinesi işleyemezdi.

Atatürk sevmek, sevilmek, gönül almak konularında çok duygulu idi; neşeli olmak ve yanındakilerde neşeli kılmak ve görmek onun için adeta bir ihtiyaçtı. Şahsi cazibesi de bu işte kendisine çok yardım ederdi. Eğlence âlemlerini çok sevdiği bilinen bir yöndür, ancak yukarda yazdıklarımızdan anlaşılacağı gibi sofrası yalnız eğlenceye ayrılmış olmayıp orada çağırılmış olanların seviyesine göre siyasal, yönetimsel ve bilimsel pek çok konular ele alınır. Onun en önem verdiği yönlerden biri de her bir başarıyı, her bir büyük işi kendine değil Türk ulusuna mal etmekti. Her ne yapmışsa 'Türk ulusundan, aldığı ilhamla' yaptığını söylemekten zevk alırdı ve yukarda anlattığımız yoklama ve danışımı usulleri bu sözünü doğrulayacak özdeydi. 'Atatürk İnkılâpları' denilmesini de istemezdi ve bu gibi sözleri hep 'Türk İnkılâpları' biçiminde düzeltirdi.

Atatürk'ün önemli bir özelliği de yaşayışının hiç bir kısmının gizli kalmasını istememesidir. Açıkça içer ve açıkça her türlü eğlencelere dalardı. Doğuştan açıklığı sevmekte olmasından (başka bu yolu tutmasının iki etkeni vardı:
1) gizlilik onun eğlencelerine katılanlardan veya onları bilenlerden bu konular üzerinde kimseye bir şey söylememelerini istemeye varırdı ki bu Atatürk'ün bir nevi minnet altına girmesi demekti. O ise hiç bir minneti kabul edecek huyda değildi.
2) O, şu inançta idi ki, açıklık aleyhteki propagandaları etkisiz bırakmak için en iyi çaredir. Eğer halk kendisini içerken görürse ondan sonra düşman propagandacılar ona ayyaş deseler halk 'onu biliyoruz gördük başka yeni bir şey söyle' karşılığında bulunur ve propaganda suya düşer. Devlet sırlarını saklama bakımından da kendine öz bir yolu vardı. Sofrasında her şey kondurduğundan yabancı casuslar sofra da bulunmuş konuklarının, meselâ dönüşte şoförler duyacak biçim de aralarında konuşmaları veya sofracı ve türlü hizmetçilerin gevezeliği sayesinde her şeyden hiç olmazsa dolayısiyle, yarım yamalak da olsa az çok haber aldıklarını sanar ve edindikleri türlü ip uçlarına derinleştirmekle yetinirlerdi. Halbuki gerçek sırrın pek az olduğuna inanan Atatürk onlar üzerinde en yakın ilgililer dışında hiç kimse ile konuşmaz, bazen aksini sandıracak konuşmalar yapar ve haberler yayarak casusları gafil avlardı. 1922 Ağustos'undaki büyük saldırı, 1926'daki Bozkurt vapurunun batması dolayısiyle La Hay'de görülen dâva için Adliye Vekili Mahmut Esat (Bozkurt)'a verilen yönergelerden kimsenin bir şey sezememesi bunun örneklerindendir.

Özet olarak diyeceğiz ki; Atatürk Samsun'a çıktığı andan itibaren Türk ulusunun gerçek önderi olmuştur. Artık dilediği gibi çalışmak ve Türklüğün kurtuluş işini bir baş olarak ele almak imkânına sahiptir. Artık uzun tartışmalar sonucunda kile olsa her önemli işte son söz onun olacaktır. Gerçi bir çok birbirine zıt unsurlarla anlaşmak, onları gidilmesi gereken doğru yolun hangisi olduğuna inandırmak için epey uğraşmak gerekecektir. Ancak O'nun bu yoldaki uğraşları önderliği esas bakımdan kabul edilmiş bir kimsenin çabalarıdır; dolayısiyle de, daha önce olduğu gibi anlayışsız, kavrayışsız veya ürkek üstlere gerçek kurtuluş yollunu tutturmak için yapılması gereken uğraşlardan daha kolay ve daha az üzücüdür.
O'nun hem askerlik hem de siyasal bakımından isabetli bir görüşe sahip olduğu genel savaş sırasındaki başarı ve zaferlerinden, yine o sırada ve daha önce İttihat ve Terakki ile Hükümete gerçek durumu ve doğru yolu göstermek için yaptığı uğraşlardan anlaşılmıştır; aydınların pek çoğu ve hatta kısmen de halk kütleleri bunu bilmektedirler.
O, elinde bu kozlar olarak işe koyulacaktır.

1. İlk uygulama parametrelerimiz şöyle olsun: #00FF99 renk seçeneği ile maksimum kelime sıklığı 1000, maksimum kelime sayısı ise 100 olsun. Bu durumda kelime bulutumuz aşağıdaki gibi olacaktır.

2. İlk uygulama parametrelerimiz şöyle olsun: #00FFCC renk seçeneği ile maksimum kelime sıklığı 500, maksimum kelime sayısı ise 500 olsun. Bu durumda kelime bulutumuz aşağıdaki gibi olacaktır.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Bilimle ve teknolojiyle kalınız.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

Veri Madenciliği (Data Mining): Metin Verisinin Keşifsel Veri Analizi Üzerine Bir Vaka Çalışması (Text Mining)

Veriden desen çıkarma işlemi anlamına gelen veri madenciliği bütün alanlarda kendine uygulama alanı bulan ve büyük veri (big data)’den farklı olan bir kavramdır. Bu kavram aynı zamanda veriyi keşfetmek olarak da tanımlanabilir. Veri madenciliği, veriden desen veya örüntü çıkarırken yapay zekayı , istatistiksel metotları ve diğer pek çok metodu kullanır. Büyük veride ise genel olarak yüksek hacim (volume), akışkanlık (velocity), çeşitlilik (variety), belirsizlik (veracity) söz konusudur. Bahsedilen bu özelliklerin aynı anda sağlanması gereklidir. Büyük veri, tek başına veri setinin büyük olduğu anlamına gelmez.

Veri madenciliğinin (data mining) bir kolunu oluşturan metin madenciliği (text mining) metotları, metinlerde en sık kullanılan anahtar kelimeleri vurgulamamıza ve görselleştirmemize olanak tanır. Bu metotlarla metin verisinden metin bulutu, etiket bulutu diyebileceğimiz kelime bulutu oluşturulabilir.

Kelime bulutu oluşturma prosedürü eğer R programlama dilinde uygulama adımları bilinirse çok zor değildir. Genel olarak R’da farklı paketler kullanılmakla birlikte genellikle metin madenciliği paketi (the text mining package ™) ve kelime bulutu oluşturucu paket (the word cloud generator package (wordcloud))’lerinin kullanıldığı görülmektedir. Bu paketler, metni hızlı analiz etmemize ve kelime bulutu olarak ortaya çıkan anahtar kelimeleri görselleştirmemize olanak tanır.

Bahsedilenler ışığında metin verisini sunmada kelime bulutunu kullanmanız gerektiği durumlar şunlardır:

  1. Kelime bulutları sadelik ve yalınlık sağlar. En sık kullanılan anahtar kelimeler, kelime bulutu içinde daha iyi kendini gösterir.
  2. Kelime bulutları potansiyel iletişim araçlarıdır. Kelime bulutlarının anlaşılması ve paylaşılması kolaydır ve kelime bulutları etkilidirler.
  3. Kelime bulutları bir tablo verisinden görsel olarak daha ilgi çekicidir.

Kelime bulutları, sektör ayrımı gözetilmeksizin bütün alanlarda kullanılabilmekle birlikte en sık kullanılan alanlarla en sık kullanılan meslek grupları şöyle özetlenebilir;

  1. Kalitatif (nitel) araştırma yapan araştırmacılar,
  2. Müşterilerin ihtiyaçlarının belirlenmesi noktasında pazarlamacılar,
  3. Temel konuları desteklemek için eğitimciler,
  4. Politikacı ve gazeteciler
  5. Kullanıcı görüşlerini toplayan, analiz eden ve paylaşan sosyal medya siteleri

R’da kelime bulutu oluşturma süreci genel olarak 5 adımda tamamlanmaktadır.

  1. Birinci adımda text (txt) uzantılı bir dosya oluşturulur. Oluşturulan bu metin dosyasının içine analiz edilecek metin (uzunluğu önemli değil) kaydedilir. Ancak bu metin dosyası txt uzantılı olarak web üzerinde de olabilir. Bu durumda txt dosyasının linki üzerinden sürece devam edilir.
  2. Gerekli R programlama dili paketleri kurulur ve yüklenir. Bu paketler;

     Install (kurulum için)

install.packages("tm")  # for text mining (metin madenciliği için)
install.packages("SnowballC") # for text stemming (metin için)
install.packages("wordcloud") # word-cloud generator (kelime bulutu oluşturucu)
install.packages("RColorBrewer") # color palettes (renk paletleri)

   Load (yüklemek için)

library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")

3. 1. aşamada oluşturulan metin dokümanı yüklenir. Kullanılan R kodu genellikle şu şekildedir;

filePath<-library(readr)
ml <- read_csv("ml.txt")
View(ml)
text <- readLines(filePath) 
filePath<-library(readr)
ml <- read_csv("ml.txt")
View(ml)
text <- readLines(filePath)

Metin madenciliği denilen bu aşamada, analiz edilecek metin text mining ™ paketinde olan Corpus() fonksiyonu kullanılır ve metin indekslenir. Daha sonra, veri temizleme faaliyetlerine başlanır. İstenmeyen kelimeler, bağlaçlar, boşluklar, sayılar bu aşamada çıkarılır.

  1. Metin temizlendikten sonra metnin içindeki kelimelerin kullanılma sıklığını gösteren bir matris oluşturulur.
  2. Son aşamada ise sıklık matrisinden bir kelime bulutu oluşturularak süreç tamamlanır.

Uygulama adımları anlatıldıktan sonra özgün örnek bir olay üzerinden şimdi bir uygulama yapalım. Kolaylık olması ve daha anlaşılır olması adına txt (text) dosyası yüklenmesi yerine analiz edilecek metin fonksiyon içine yazılarak aşamalar kısaltılacaktır. Bilinirliğinden dolayı, örnek uygulamada kullanılan metin, Nutuk adlı eserden alınmıştır.

#Analizde Kullanılan Nutuk Adlı Eserden alınan Metin

Türk Gençliğine Bıraktığımız Kutsal Armağan Saygıdeğer baylar, sizi, günlerce işlerinizden alıkoyan uzun ve ayrıntılı sözlerim, en sonu tarihe mal olmuş bir dönemin öyküsüdür. Bunda, ulusum için ve yarınki çocuklarımız için dikkat ve uyanıklık sağlayabilecek kimi noktaları belirtebilmiş isem kendimi mutlu sayacağım.Baylar, bu söylevimle, ulusal varlığı sona ermiş sayılan büyük bir ulusun, bağımsızlığını nasıl kazandığını; bilim ve tekniğin en son ilkelerine dayanan ulusal ve çağdaş bir devleti nasıl kurduğunu anlatmaya çalıştım.Bugün ulaştığımız sonuç, yüzyıllardan beri çekilen ulusal yıkımların yarattığı uyanıklığın ve bu sevgili yurdun her köşesini sulayan kanların karşılığıdır.Bu sonucu, Türk gençliğine kutsal bir armağan olarak bırakıyorum.Ey Türk gençliği! Birinci ödevin; Türk bağımsızlığını, Türk Cumhuriyetini, sonsuzluğa değin korumak ve savunmaktır.Varlığının ve geleceğinin biricik temeli budur. Bu temel, senin en değerli hazinendir. Gelecekte de, seni bu kaynaktan yoksun etmek isteyen iç ve dış kötücüller bulunacaktır. Bir gün, bağımsızlığını ve cumhuriyetini savunmak zorunda kalırsan, ödeve atılmak için, içinde bulunacağın durumun olanaklarını ve koşullarını düşünmeyeceksin! Bu olanak ve koşullar çok elverişsiz bir nitelikte belirebilir. Bağımsızlığına ve cumhuriyetine kıymak isteyecek düşmanlar, bütün dünyada benzeri görülmedik bir utku kazanmış olabilirler.Zorla ve aldatıcı düzenlerle sevgili yurdunun bütün kaleleri alınmış, bütün gemilikleri ele geçirilmiş, bütün orduları dağıtılmış ve yurdun her köşesi fiilen işgal edilmiş olabilir. Bütün bu koşullardan daha acı ve daha korkunç olmak üzere, yurdunda, iş başında bulunanlar, aymazlık ve sapkınlık, üstelik, hainlik içinde olabilirler. Dahası iş başında bulunan bu kişiler, kendi çıkarlarını, yurduna girmiş olan düşmanların siyasal erekleriyle birleştirebilirler. Ulus, yoksulluk ve sıkıntı içinde ezgin ve bitkin düşmüş olabilir.Ey Türk geleceğinin çocuğu! İşte, bu ortam ve koşullar içinde bile ödevin, Türk bağımsızlığını ve Cumhuriyetini kurtarmaktır! Bunun için gereken güç, damarlarındaki soylu kanda vardır.

# Yukarıda bahsedilen paketlerin kurulumu ve yüklenme işlemi tamamlandıktan sonra, metni, indekslenmesi için ilk olarak corpus fonkyonu içinde tanımlanmış VectorSource fonksiyonu içine alıyoruz.

docs <- Corpus(VectorSource("Türk Gençliğine Bıraktığımız Kutsal Armağan Saygıdeğer baylar, sizi, günlerce işlerinizden alıkoyan uzun ve ayrıntılı sözlerim, en sonu tarihe mal olmuş bir dönemin öyküsüdür. Bunda, ulusum için ve yarınki çocuklarımız için dikkat ve uyanıklık sağlayabilecek kimi noktaları belirtebilmiş isem kendimi mutlu sayacağım.Baylar, bu söylevimle, ulusal varlığı sona ermiş sayılan büyük bir ulusun, bağımsızlığını nasıl kazandığını; bilim ve tekniğin en son ilkelerine dayanan ulusal ve çağdaş bir devleti nasıl kurduğunu anlatmaya çalıştım.Bugün ulaştığımız sonuç, yüzyıllardan beri çekilen ulusal yıkımların yarattığı uyanıklığın ve bu sevgili yurdun her köşesini sulayan kanların karşılığıdır.Bu sonucu, Türk gençliğine kutsal bir armağan olarak bırakıyorum.Ey Türk gençliği! Birinci ödevin; Türk bağımsızlığını, Türk Cumhuriyetini, sonsuzluğa değin korumak ve savunmaktır.Varlığının ve geleceğinin biricik temeli budur. Bu temel, senin en değerli hazinendir. Gelecekte de, seni bu kaynaktan yoksun etmek isteyen iç ve dış kötücüller bulunacaktır. Bir gün, bağımsızlığını ve cumhuriyetini savunmak zorunda kalırsan, ödeve atılmak için, içinde bulunacağın durumun olanaklarını ve koşullarını düşünmeyeceksin! Bu olanak ve koşullar çok elverişsiz bir nitelikte belirebilir. Bağımsızlığına ve cumhuriyetine kıymak isteyecek düşmanlar, bütün dünyada benzeri görülmedik bir utku kazanmış olabilirler.Zorla ve aldatıcı düzenlerle sevgili yurdunun bütün kaleleri alınmış, bütün gemilikleri ele geçirilmiş, bütün orduları dağıtılmış ve yurdun her köşesi fiilen işgal edilmiş olabilir. Bütün bu koşullardan daha acı ve daha korkunç olmak üzere, yurdunda, iş başında bulunanlar, aymazlık ve sapkınlık, üstelik, hainlik içinde olabilirler. Dahası iş başında bulunan bu kişiler, kendi çıkarlarını, yurduna girmiş olan düşmanların siyasal erekleriyle birleştirebilirler. Ulus, yoksulluk ve sıkıntı içinde ezgin ve bitkin düşmüş olabilir.Ey Türk geleceğinin çocuğu! İşte, bu ortam ve koşullar içinde bile ödevin, Türk bağımsızlığını ve Cumhuriyetini kurtarmaktır! Bunun için gereken güç, damarlarındaki soylu kanda vardır"))

#Dokuman incele fonksiyonu çalıştırılır.

inspect(docs)

#Metin dönüştürülür.

toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\|")

#Veri temizlenir.

# Metni küçük harfe dönüştür.
docs <- tm_map(docs, content_transformer(tolower))
# Metinden rakamları ayıkla.
docs <- tm_map(docs, removeNumbers)
# Çıkarılmasını istediğiniz kelimeleri ve bağlaçları çıkar.
docs <- tm_map(docs, removeWords, c("her", "için", "bile", "bir", "bütün", "daha", "beri")) 
# Noktalama işaretlerini kaldır.
docs <- tm_map(docs, removePunctuation)
# Ekstra boşlukları kaldır.
docs <- tm_map(docs, stripWhitespace)

#Kelime sıklık matrisi oluşturulduktan sonra sıralı bir şekilde ilk 10 kelimeyi data frame (veri çerçevesi) formatında getirilir.

dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
head(d, 10)

Yukarıdaki fonksiyonlarının çalıştırılmasıyla elde edilen sıklık çerçeve tablosu aşağıdaki gibidir.

freqtable

#Kelime bulutu oluşturularak süreç tamamlanır. Bu aşamada her defasında aynı sonuçların ve düzenin elde edilebilmesi için set.seed() ve random.order=FALSE fonksiyonları kullanılır. Kelimeleri renklerdirmek için brewer.pal() fonksiyonu kullanılır.

set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 2,
          max.words=500, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

Yukarıdaki fonksiyonlarının çalıştırılmasıyla elde edilen kelime bulutunun ilk görünümü aşağıdaki gibidir.

Rplot

Görüntüyü daha görsel bir hale sokmak sokmak için yukarıda elde edilen veri çerçevesine ilişkin alternatif kelime bulutları oluşturulmuştur.

Alternatif 1: Kelime Bulutu Kod Bloğu

wordcloud2(d, size=1.6)

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Alternatif 1: Kelime Bulutu (Word Cloud)

wordcloud2-1

Alternatif 2: Kelime Bulutu Kod Bloğu

wordcloud2(d, size=1.6, color='random-light', backgroundColor="black")

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Rplot02

Alternatif 3: Kelime Bulutu Kod Bloğu

wordcloud2(d, size = 2.3, minRotation = -pi/6, maxRotation = -pi/6, rotateRatio = 1)

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Rplot03

Son alternatif de benim sizlere süprizim olsun diyeceğim ama görüyorsunuz :).

Alternatif 3: Kelime Bulutu Kod Bloğu

wordcloud2(d, size = 0.7, shape = 'star')

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Rplot04

Kelime bulutu oluşturma süreci tamamladıktan sonra bu süreci biraz daha ileriye taşıyalım. Ortaya konulan kelime bulutlarının sıklıklarına göre grafikler oluşturalım.

Alternatif 1: Grafik Kod Bloğu

install.packages("tidyverse")
library(ggplot2)
str(d)
y<-head(d, 10)
y
ggplot(y)+geom_point(aes(freq, word),col="red",size=4, shape="+")+
labs(subtitle=NULL, y="Kelime Sayısı", x="Kelimeler",title="En Çok Karşılan İlk 10 Kelime", caption = "Source:TBulut")+
xlim(2,7)+
  theme(plot.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=18, hjust=0.5)) +
theme(axis.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=12))

Yukarıdaki kod bloğunun çalıştırılmasıyla elde edilen grafik aşağıdaki gibidir.

nutukchart-1

Alternatif 2: Grafik Kod Bloğu

install.packages("tidyverse")
library(ggplot2) 
str(d) 
y<-head(d, 10) y
ggplot(y, aes(freq, word))+geom_point(col="red", size=4)+
labs(subtitle=NULL, y="Kelimeler", x="Kelime Sayısı",title="En Çok Karşılan İlk 10 Kelime", caption = "Source:TBulut")+
xlim(2,7)+
    theme(plot.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=18, hjust=0.5)) +
theme(axis.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=12))

Yukarıdaki kod bloğunun çalıştırılmasıyla elde edilen grafik aşağıdaki gibidir.

wordcloudnutuk-2

Faydalı olması dileğiyle.

Saygılarımla.

Not: Emeğe saygı adına, burda yapılan çalışmanın başka bir mecrada ya da ortamda paylaşılması halinde alındığı yer adının belirtilmesini rica ederim.

Yararlanılan Kaynaklar

22HarvJLTech515.pdf erişimi için tıklayın

Öne çıkan

R’da Kelime Bulutu Uygulaması Geliştirilmesi Üzerine Bir Vaka Çalışması: A Case Study on Developing a Word Cloud Application in R

Burada yapılan çalışmayla R programlama dili kullanılarak veri madenciliğinin bir dalı olan metin madenciliği (text mining) alanında bir uygulama geliştirilmiştir. Böylece kolay kullanım arayüzü sunan uygulama ile nitel araştırmalar yapan saha ve akademi çalışanlarına kolaylık sağlanması amaçlanmıştır.

Çalışma kapsamında geliştirilen uygulamadan bir ekran kesiti aşağıda verilmiştir.

Uygulamaya ise aşağıdaki linkten ulaşabilirsiniz.

https://buluttevfik.shinyapps.io/kelimebulutuv2/

Faydalı olması dileğiyle.

Yararlanılan Kaynaklar

Veri Madenciliği: Web Sitelerinin Keşifsel Veri Analizi Üzerine Bir Vaka Çalışması

Önceki çalışmalarda hem web ortamında hem de bilgisayarda kayıtlı “TXT” formatında kayıtlı metin verisinin kelime bulutunu oluşturmaya yönelik örnekler yapılmış ve bu verilerin hiyerarşik küme analizi yapılmıştır. Şimdi ise yapacağım örnek uygulamada, “HTML” uzantılı  web siteleri, kelime bulutu (word cloud), tanımlayıcı istatistikler ve hiyerarşik küme analizi açısından değerlendirilecektir.  Bu örnek için seçilen web sitesi “http://www.bbc.com/&#8221; ve baz alınan tarih 05/08/2018‘dir.

Uygulama adımları bir önceki örnekte açıklansa da yine adımlar detaylı bir şekilde anlatılmaya çalışılacaktır.

İlk olarak analiz için R paketleri kurulup, yüklenecektir.

#Kurulum için
install.packages(c("tm", "SnowballC", "wordcloud", "RColorBrewer", "RCurl", "XML"))

#Yüklemek için
library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")
library("rvest") #HTML uzantılı web adreslerinden alınan veriyi işlemek için

Paketler yüklendikten sonra kelime bulutu oluşturulacak sitenin adresi yoluyla birlikte tanımlanır. Tanımlanan yoldan sonra, web sitesi, corpus() fonksiyonu ile indekslenerek veri temizleme işlemine geçilir. Daha sonra, kelimeler,  veri çercevesi (data frame)’ne dönüştürülerek sıklıklarına göre büyükten küçüğe doğru sıralanır. Yapılan işlemlere ilişkin kod bloğuna aşağıda yer verilmiştir.

#Veri Yolu
data    <- read_html("http://www.bbc.com/", language="en")
data   <- html_text(data)
###Veri indeksleme, temizleme ve matrise dönüştürme işlemleri
docs<-Corpus(VectorSource(data))
inspect(docs)
toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\\|")
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeNumbers)
docs <- tm_map(docs, removeWords, c("the", "for", "of","does","was","bbccook", "window","bbc","dot","com", "static", "bbc","icouk", "that","are","and","has","wwhp","cdata", "var","is","his","her","about", "will", "bbcdotcom", "bbcicouk", "bbcico","uk","typeof"))
docs <- tm_map(docs, removeWords, stopwords("english"))
docs <- tm_map(docs, removePunctuation)
docs <- tm_map(docs, stripWhitespace)
docs <- tm_map(docs, stemDocument)
#Dokuman matriksinin oluşturulması
dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
#Kelimelerin sıralanarak veri çercevesine dönüştürülmesi
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)

Veri temizleme işlemleri yapıldıktan ve veri çercevesi oluşturulduktan sonra aşağıdaki kod bloğuyla kelime bulutu oluşturulur. Kelime bulutu, kelimelerin tekrarlanma sıklığı en az 4 olan maksimum 200 kelime içinde yer alacak şekilde tanımlanmıştır.

set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 4,
max.words=200, random.order=FALSE, rot.per=0.35, 
colors=brewer.pal(8, "Dark2"))

Yukarıdaki kod bloğundan sonra 05/08/2018 tarihi itibariyle http://www.bbc.com/ haber sitesinin aşağıdaki kelime bulutu elde edilmiş olur.

Kelime bulutu oluşturulduktan sonra en sık karşılaşılan ilk 10 kelime, kod bloğu ile birlikte aşağıda verilmiştir.

library(gridExtra)
grid.table(head(d, 10))

Buna göre öne çıkan tanımlayıcı (descriptive) istatistik niteliğinde ilk 10 kelime sıklıklarına (frequencies) göre aşağıda verilmiştir.

Yapılan bu çalışmaların, özellikle keşifsel veri analizi (exploratory data analysis) ve nitel araştırma alanına giren içerik analizi (content analysis) noktasında önemli bir katkı sunacağı inancındayım.

Faydalı olması dileğiyle…

Not: Emeğe saygı adına, yapılan çalışmanın başka bir mecrada ya da ortamda paylaşılması halinde alındığı yer adının belirtilmesini rica ederim.

Saygılarımla.

Veri Madenciliği (Data Mining): Web Üzerindeki Metinlerin Keşifsel Veri Analizi Üzerine Bir Vaka Çalışması

Veri madenciliği alanına giren kelime bulutu üzerine yapılan ilk uygulamada alınan metin (text) verisi üzerinde uygulama yapılmıştı. Şimdi online platformlarda yani web sitelerinde bulunan veri tabanları üzerinde yine özgün örnek bir uygulama yapalım. Örneği yapılacak çalışma, Uluslararası Kızıl Haç Komitesi (The International Committee Of The Red Cross) tarafından hazırlanan 1914-1917 arası yılları anlatan bir rapora dayanmaktadır. Raporun adı Mısırda Türk Mahkumları (Turkish Prisoners in Egypt ) olup, 2004 yılında 76 sayfa olarak yayınlanmıştır.

Uygulama adımları bir önceki örnekte açıklandığı için bu kısımda doğrudan uygulamaya geçilecektir.

İlk olarak raporun edinildiği web adresini de belirtelim. Web adresi, “http://www.gutenberg.org/cache/epub/10589/pg10589.txt&#8221; dir. Şimdide kullanılan kod bloklarını yazalım.

Kod Bloğu-1

filePath <- "http://www.gutenberg.org/cache/epub/10589/pg10589.txt"
text <- readLines(filePath)
docs <- Corpus(VectorSource(text))
inspect(docs
toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\\|")
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeNumbers)
docs <- tm_map(docs, removeWords, stopwords("english"))
docs <- tm_map(docs, removeWords, c("agr", "will", "one", "two","gutenberg", "english", "offic","hospit", "per"))
docs <- tm_map(docs, removePunctuation)
docs <- tm_map(docs, stripWhitespace)
docs <- tm_map(docs, stemDocument)
dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
#En çok tekrarlanan 10 kelime
head(d, 10)

#Kelime bulutu kod bloğu (en az bir en fazla 200 kez tekrarlanan kelimeler alınmıştır)r)
set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 1,
          max.words=200, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

Yukarıdaki kod bloğundan sonra aşağıdaki kelime bulutu elde edilmiş olur.

Bu işlemden sonra sıklık terimlerine dayalı olarak sıklık grafiği oluşturulur. Bu işlemin kod bloğu aşağıda verilmiştir.

Kod Bloğu-2

###Grafik oluşturmak için
library(ggplot2)
str(d)
y<-head(d, 10)
y
ggplot(y)+geom_point(aes(freq, word),col="red",size=5, shape="+")+
labs(subtitle=NULL, y="Kelimeler", x="Kelime Sayısı",title="En Sık 10 Kelime", caption = "Source:TBulut")+
xlim(42,187)+
  theme(plot.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=18, hjust=0.5)) +
theme(axis.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=12))

Kod bloğunun çalıştırılmasından sonra elde edilen kelime sıklık grafiği aşağıdaki gibidir.

En sık 10 kelimeyi gösteren Grafik elde edildikten sonra veri setindeki grupları belirleyerek kümelemeye olanak tanıyan hiyerarşik küme analizi (Hierarchical Cluster Analysis) yapılmıştır. Elde edilen sonuçlar, bu yöntemde küme dendogramı (cluster dendgram) aracılığıyla sunulur. Gözlemleri ağaçın dallarına benzer bir şekilde sunmaya yarayan dendrogram kelime grupları arasındaki ilişkiyi gösterir. Burada kümeler arasındaki uzaklıkların hesaplanmasında öklidyen uzaklık yöntemi kullanılmıştır. Hiyerarşik küme analizinde kullanılan kod bloğu aşağıda sunulmuştur.

Kod Bloğu-3

k<-head(d,20)
m  <- as.matrix(k)
distMatrix <- dist(m, method="euclidean")
library(cluster)   
fit <- hclust(distMatrix, method="complete")
fit 
plot(fit, hang=-1)

Kod bloğunun çalıştırılmasından sonra elde edilen dendrogram aşağıdaki gibidir.

 

Yapılan bu çalışmaların, özellikle keşifsel veri analizi (exploratory data analysis) ve nitel araştırma alanına giren içerik analizi (content analysis) noktasında önemli bir katkı sunacağı inancındayım.

Not: Emeğe saygı adına, yapılan çalışmanın başka bir mecrada ya da ortamda paylaşılması halinde alındığı yer adının belirtilmesini rica ederim.

Saygılarımla.