NAIVE BAYES YÖNTEMİ İLE BLOG İÇERİKLERİNİN SINIFLANDIRILMASI Onur DEĞERLİ YÜKSEK LİSANS TEZİ BİLGİSAYAR BİLİMLERİ GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ KASIM 2012 ANKARA iv NAIVE BAYES YÖNTEMİ İLE BLOG İÇERİKLERİNİN SINIFLANDIRILMASI (Yüksek Lisans Tezi) Onur DEĞERLİ GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ Kasım 2012 ÖZET İnternet teknolojilerinin gelişimi ile birlikte bilginin yayılımı ve miktarı da artmıştır. Artan bilgi içerisinde, kullanıcıların kaliteli ve doğru içeriklere ulaşması da gittikçe zorlaşmaktadır. Blog içerikleri, sosyal medya siteleri gibi yapılar, bilginin artmasında ve yayılımında en önemli etmenler haline gelimiştir. Bu tezde, kategorileri editör vasıtası ile belirlenmiş blogların içerikleri, kelime ve kelime gruplarına ayrıştırılmıştır. Bu gruplar 8 kategori altında sınıflandırılmıştır. Daha sonra eğitim kümesi oluşturulmuştur. Bu eğitim kümesi kullanılarak, veri madenciliği algoritmalarından birisi olan Naive Bayes algoritması ile kategorisi belli olmayan bir test içeriğinin hangi kategoriye ait olacağını bulan uygulama başarılı bir şekilde yapılmıştır. Bilim Kodu : 702 . 1.014 Anahtar Kelimeler : veri madenciliği, blog madenciliği, metin madenciliği, naive bayes, semantik web, web crawler. Sayfa Adedi : 75 Tez Yöneticisi : Doç. Dr. O. Ayhan ERDEM v BLOG CONTENT CLASSIFICATION WITH NAIVE BAYES TECHNIQUE (M.Sc. Thesis) Onur DEĞERLİ GAZİ UNIVERSITY INSTITUTE OF INFORMATICS November 2012 ABSTACT Quantity and spread of knowledge is increased with the development of internet technologies. Increased knowledge makes it hard for users to reach qualified and right contents. Blog contents and social media sites has become important factors to increase and spread knowledge. In this thesis; blog contents, which were specified by editor, are split as words and word groups and classified in 8 categories and then training set was created. The application to predict the category of an unclassified test data is successfully done by using this training set, with the Naive Bayes algorithm which is one of the data mining techniques. Science Code Keywords Page Number Adviser : 702 . 1.014 : data mining, blog mining, text mining, naive bayes, semantic web, web crawler. : 75 : Assoc. Prof. Dr. O. Ayhan ERDEM vi TEŞEKKÜR Bu çalışmanın gerçekleşmesine katkılarından dolayı ve danışmanım olarak tezin yazılmasında yol gösteren sayın hocam Doç. Dr. O. Ayhan ERDEM’e teşekkür ederim. vii İÇİNDEKİLER ÖZET........................................................................................................................... iv ABSTRACT ................................................................................................................. v TEŞEKKÜR ................................................................................................................ vi İÇİNDEKİLER .......................................................................................................... vii ÇİZELGELERİN LİSTESİ ......................................................................................... ix ŞEKİLLERİN LİSTESİ ............................................................................................... x SİMGELER ................................................................................................................. xi 1. GİRİŞ ....................................................................................................................... 1 2. BLOGLAR VE VERİ MADENCİLİĞİ ÇALIŞMALARI ...................................... 4 2.1. Veri Madenciliği Çalışmaları ............................................................................ 5 3. VERİ MADENCİLİĞİ ............................................................................................. 7 3.1. Veri Madenciliği Süreçleri ............................................................................... 8 3.1.1. Veri temizleme ...................................................................................... 9 3.1.2. Veri bütünleştirme ................................................................................. 9 3.1.3. Veri indirgeme ..................................................................................... 10 3.1.4. Veri dönüştürme .................................................................................. 10 3.1.5. Veri madenciliği algoritmasının uygulanması .................................... 10 3.1.6. Sonuçları sunma ve değerlendirme ..................................................... 10 3.2. Veri Madenciliği Teknikleri ........................................................................... 11 3.2.1. Karar Ağaçları ..................................................................................... 12 3.2.2. Yapay Sinir Ağları .............................................................................. 13 3.2.3. Genetik Algoritma .......................................................................................... 14 3.2.4. K-en Yakın Komşu Algoritması .................................................................... 15 3.2.5. Birliktelik Kuralı ............................................................................................ 16 3.2.6. Naive Bayes ................................................................................................... 16 3.3. Veri Madenciliği Kullanım Alanları ............................................................... 22 4. BLOG İÇERİKLERİNİN SINIFLANDIRILMASI............................................... 26 4.1. Kategorilerin Belirlenmesi .............................................................................. 26 4.2. Kategorilere Göre Blog Listelerinin Oluşturulması ........................................ 27 4.3. Veritabanı Yapısının Oluşturulması ................................................................ 29 4.4. Blog İçeriklerinin Kaydedilmesi ..................................................................... 36 4.5. Eğitim Verisinin Oluşturulması ...................................................................... 38 viii 4.6. Naive Bayes Algoritmasının Uygulanması ..................................................... 44 4.7. Kullanılan Test Yöntemleri Ve Test Sonuçlarının Değerlendirilmesi ............ 52 4.8. Uygulama Arayüzü ......................................................................................... 61 4.8.1. Anasayfa ............................................................................................... 61 4.8.2. İstatistik sayfası .................................................................................... 66 4.8.3. Test içerik listesi sayfası ...................................................................... 67 4.8.4. Test içerik oluşturma sayfası ................................................................ 68 5. SONUÇ VE ÖNERİLER ....................................................................................... 70 KAYNAKLAR .......................................................................................................... 72 ÖZGEÇMİŞ ............................................................................................................... 75 ix ÇİZELGELERİN LİSTESİ Çizelge Sayfa Çizelge 3.1. Örnek veri kümesi .................................................................................. 19 Çizelge 3.2. Örnek veri kümesinin olasılık tablosu .................................................. 20 Çizelge 4.1. Kategorilere göre blog sayısı ................................................................ 28 Çizelge 4.2. Kategorilere göre blog yazısı sayısı ...................................................... 28 Çizelge 4.3. Kelime grubu türlerine göre kayıt sayısı ............................................... 43 Çizelge 4.4. Kategorilere göre kelime sayısı ............................................................ 44 Çizelge 4.5. Kelimelerin kategorilerde geçme toplamlarının her bir kategorideki toplam sayısı .......................................................................................... 46 Çizelge 4.6. Kategorilerin ağırlıkları ........................................................................ 47 Çizelge 4.7. "İnternet" kelimesinin kategorilerdeki geçme toplamları ..................... 47 Çizelge 4.8. "İnternet" kelimesinin kategorilerdeki geçme oranları ......................... 49 Çizelge 4.9. Cümle şeklinde girilen test verisinde bulunan kelime ve kelime gruplarının kategorilerdeki geçme toplamları ...................................... 50 Çizelge 4.10. Cümle şeklinde girilen test verisinde bulunan kelime ve kelime gruplarının toplam geçme toplamları .................................................. 50 Çizelge 4.11. Cümle şeklinde girilen test verisinde bulunan kelime ve kelime gruplarının kategorilerdeki oranları...................................................... 51 Çizelge 4.12. Rastgele seçilen içerikler üzerinde uygulanan test işlemi sonucunda çıkan oranlar ........................................................................................ 52 Çizelge 4.13. Sağlık kategorisi için yapılan cümle bazlı test sonuçları ..................... 56 Çizelge 4.14. Ekonomi kategorisi için yapılan cümle bazlı test sonuçları................. 56 Çizelge 4.15. Seyahat kategorisi için yapılan cümle bazlı test sonuçları................... 57 Çizelge 4.16. Eğitim kategorisi için yapılan cümle bazlı test sonuçları .................... 58 Çizelge 4.17. Moda kategorisi için yapılan cümle bazlı test sonuçları ...................... 58 Çizelge 4.18. Yemek kategorisi için yapılan cümle bazlı test sonuçları .................... 59 Çizelge 4.19. Spor kategorisi için yapılan cümle bazlı test sonuçları ........................ 60 Çizelge 4.20. Teknoloji kategorisi için yapılan cümle bazlı test sonuçları ................ 60 x ŞEKİLLERİN LİSTESİ Şekil Sayfa Şekil 4.1. Blog tablosunun yapısı .............................................................................. 31 Şekil 4.2. Category tablosunun yapısı ....................................................................... 31 Şekil 4.3. Post tablosunun yapısı .............................................................................. 32 Şekil 4.4. Keyword tablosunun yapısı ...................................................................... 33 Şekil 4.5. Blog_category tablosunun yapısı .............................................................. 33 Şekil 4.6. Blog_keyword tablosunun yapısı .............................................................. 34 Şekil 4.7. Category_keyword tablosunun yapısı ....................................................... 34 Şekil 4.8. Post_test tablosunun yapısı ....................................................................... 35 Şekil 4.9. Post_test_puan tablosunun yapısı ............................................................. 35 Şekil 4.10. Test_content tablosunun yapısı ............................................................... 36 Şekil 4.11. “İnternet” kelimesine ait blog_keyword tablosu kayıtları ...................... 42 Şekil 4.12. “İnternet” kelimesine ait category_keyword tablosu kayıtları ............... 43 Şekil 4.13. Algoritma uygulama anasayfası .............................................................. 62 Şekil 4.14. Rastgele içerik getirme sekmesi .............................................................. 63 Şekil 4.15. Test içerik getirme sekmesi ..................................................................... 63 Şekil 4.16. Kayıtlı url'den içerik getirme sekmesi .................................................... 63 Şekil 4.17. Harici url'den içerik getirme sekmesi ..................................................... 64 Şekil 4.18. İçerik alanında bulunan test verisinin gösterimi ...................................... 64 Şekil 4.19. Sonuçlar listesi ........................................................................................ 64 Şekil 4.20. Sonuçları değerlendir paneli .................................................................... 65 Şekil 4.21. Kelime ve kelime gruplarının kategorilere göre oranları paneli .............. 65 Şekil 4.22. Eğitim kümesi içerisinde geçmeyen kelime ve kelime grupları .............. 66 Şekil 4.23. İstatistik sayfası ....................................................................................... 67 Şekil 4.24. Test içerik listeleme sayfası .................................................................... 68 Şekil 4.25. Test içerik oluşturma sayfası .................................................................. 69 xi SİMGELER Bu çalışmada kullanılmış bazı simgeler açıklamaları ile birlikte aşağıda sunulmuştur. Simgeler Açıklama c Toplam kategori sayısı C Kategori f 0 değer problemini çözmek için kullanılan katsayı F Herbir kelimenin kategoride geçme toplamlarının toplamı fr f*r değeri i Algoritmaya girecek toplam kelime ve kelime grubu sayısı K Kategorinin toplam içerik içerisindeki ağırlığı k Kelime veya kelime grubunun kategoride geçme toplamı n Kelime veya kelime grubunun kategorideki ağırlığı P Girilen içeriğin kategorideki ağırlığı r f/i değeri t Kelime veya kelime grubunun ilgili kategoride toplam geçme sayısı T Kategorilerde geçen kelime ve kelime gruplarının geçme toplamları X Örnek veri seti NULL Veri tabanında bir veri alanında verinin bulunmaması 1 1. GİRİŞ İnternet teknolojilerinin hızlı bir şekilde gelişmesi, kullanıcıların bilgiye ulaşımı hızını ve ulaşılan bilgilerin miktarını artan bir ivmeyle çoğaltmaktadır. Daha önce web sayfalarından kullanıcıya doğru olan bilgi akışı, Web2.0 kavramı ile birlikte çift yönlü hale gelmiş ve kullanıcılar da içerik oluşturmaya başlamıştır. Kullanıcılar kendi özgün içeriklerini oluşturarak, kayıtlı olan içeriği kopyalayarak veya üzerinde değişiklik yaparak veri miktarındaki artışa katkıda bulunmaktadırlar. Dinamik web siteleri, haber siteleri, çeşitli konularda bilgiler içeren portallar, eticaret siteleri, vikiler, bloglar ve sosyal medya siteleri gibi kaynaklar vasıtasıyla kullanıcılar yeni içerikler oluşturmaktadır. Özellikle bloglar ve sosyal medya siteleri bu veri artışının en temel kaynaklarıdır. Katlanarak artan bu veriler, blog ve sosyal medya ortamları üzerinden çok hızlı bir şekilde yayılmaktadır. Bu yüzden üretilen verinin güncelliği kısa süre içinde kaybolmaktadır. Verinin hızlı artışı ve tüketimi beraberinde bir takım problemleri de getirmiştir. Kullanıcıların aradıklarını doğru ve hızlı bir şekilde bulmaları zorlaşmış, büyük veri yığınları içinde kaliteli veriye ulaşmak internet çağının en önemli problemlerinden biri haline gelmiştir. Web 2.0 ile ortaya çıkan büyük ve kalitesiz veri yığınlarının, anlamlı ve nitelikli bilgiye dönüştürülebilmesi için veri madenciliği teknolojisi yaygın olarak kullanılmaya başlanmıştır. Veri madenciliği yüksek miktardaki içeriğin bilgisayar yazılımları ile temizlenmesi, ayrıştırılması, tanımlanması ve anlamlandırılması konusunda sürekli ilerlemekte olan bir disiplindir. Veri madenciliği ile elde edilen verilerin anlamlı veri yapılarına dönüşmesi de yine Web 2.0 döneminden sonra önem kazanmaya başlayan semantik web teknolojileriyle gerçekleştirilebilmektedir. Semantik web ile sadece metin tabanlı arama ve bulma işlevlerinden çok daha fazlasını yapabilmek mümkün olmaktadır. Kullanıcılar anlam bilgisini de içeren 2 semantik içerik üretebildiği gibi, var olan içeriği analiz ederek semantik ilişkileri ve anlamları tespit eden yazılımlar da geliştirilebilmektedir. Bu çalışmanın temeli, büyük veri yığınlarının tasnif edilip anlamlandırılması üzerine kurulmuştur. Sınıflandırılabilir özelliklerinden dolayı ve oldukça büyük veri kaynakları olması sebebi ile veri kaynağı olarak bloglar kullanılmış; kategoriler ile ilişkilendirilmiş blogların içerikleri alınıp, ayrıştırılarak oluşturulacak eğitim kümeleri ile veri madenciliği algoritmaları kullanılarak sonradan gelecek herhangi bir içeriğin hangi kategoriye ait olacağı bulunmaya çalışılmıştır. Böylece, bu çalışma ile büyük veri yığınlarından anlamlı veri kümeleri elde edilmesi ve bu verileri semantik web uygulamalarında kullanılmasına yardımcı olması amaçlanmıştır. Çalışmanın veri kümeleri için teknoloji, ekonomi, moda, seyahat, yemek, spor, sağlık, eğitim kategorileri seçilmiş, bu kategorilere uygun olarak bulunan blog siteleri web-crawler teknolojisi ile içerikleri alınarak veritabanına kaydedilmiştir. Her bir blogun içerisinde oluşturulmuş, sayfa ve blog yazarı tarafından oluşturulan içerik, bağlı olduğu blogun kategorisi ile ilişkilendirilecek şekilde tekrar kaydedilmiştir. Bu işlem algoritma uygulama aşamasında sistemin daha hızlı ve performanslı çalışmasını sağlamaktadır. Türkçe'nin dil yapısının diğer dillere göre farklılık göstermesi de Türkçe ile yapılan veri madenciliği çalışmalarını zorlaştırmaktadır. Türkçe sondan eklemeli bir dil olduğu için kelimenin kökünü bulmak bir çok diğer dile göre daha zordur. Bu problemi aşmak ve kelimeleri köklerine ayırarak eğitim kümesini oluşturmak için Türkçe'nin dil yapısına uygun olarak hazırlanan Zemberek isimli doğal dil işleme yazılımı kullanılmıştır. Veritabanına kaydedilen tüm içerikler, 1 kelime, 2 kelime ve 3 kelimelik kelime grupları halinde ayrıştırılıp ilgili kategoriler ile ilişkilendirilerek eğitim kümesi oluşturulmuştur. 3 Kelime ve kelime grupları kategoriler ile ilişkilendirilirken, ilgili kategoride kaç defa yer aldığı bilgisi kaydedilmektedir. Bu bilgi kullanılan algoritmanın temel yapısını oluşturmaktadır. Yeni gelen içeriğin hangi kategoriye ait olacağı hesaplanırken bu veriden yararlanılmaktadır. Sınıflandırma algoritması olarak veri madenciliği tekniklerinden Naive Bayes algoritması kullanılmıştır. Naive Bayes, değişkenler arasındaki ilişkiyi analiz eden tahminci ve tanımlayıcı bir sınıflama algoritmasıdır ve verinin öğrenilmesi esasına dayanmaktadır. Eğitimde kullanılan veriler, modelin öğrenilmesi için her çıktının kaç kere meydana geldiğini hesaplar. Kelime ve kelime gruplarının köklerine göre ayrıldıktan ve her bir kategoride kaç kere geçtiğini hesapladıktan sonra ilgili kategori ile ilişkilendirilip kaydedilmesinin nedeni budur. Bu değer öncelikli olasılık olarak adlandırılır. Kategoriler içerisinde geçen kelimelerin meydana gelme toplamlarının birleşimi bağımlı değişken olarak adlandırılır. Bu değişken, veri kümesinden yapılacak tahmin için kullanılır. Girilen test kümesi, eğitim kümesi oluşturulurken yapıldığı gibi kelime köklerine ayrılır ve her bir kategorideki meydana gelme adetleri bulunur. Bulunan bu sayılar bağımlı değişkenlere bölünüp birbirleri ile çarpılarak kategori olasılıkları hesaplanır. Bu çalışma beş bölümden oluşturulmuştur. Çalışmanın ikinci bölümünde bloglar ve bloglar konusunda yapılan veri madenciliği çalışmalarından bahsedilmiştir. Üçüncü bölümde veri madenciliğinin genel açıklamaları verilmiş, süreçler ve algoritmalardan bahsedilmiştir. Dördüncü bölümde veri madenciliği ile blog içeriklerinin sınıflandırılması konusunda yapılan çalışma detaylı bir şekilde anlatılmıştır. Beşinci bölüm sonuç ve öneriler bölümü olup, yapılan çalışmanın genel sonuçlarından bahsedilmiş ve önerilerde bulunulmuştur. 4 2. BLOGLAR VE VERİ MADENCİLİĞİ ÇALIŞMALARI Bloglar, girilen yazıların sondan başa doğru kronolojik olarak listelendiği, sık sık güncellenen web sayfalarıdır. İnternet kullanıcıları duygu ve düşüncelerini özgürce ifade edebilmek için blogları çok yaygın olarak kullanmaktadırlar. Bloglar bir çok yararlı bilgi içerse de yapılandırılmamış konular ve daha geniş konuları içerebileceği için çok fazla gürültülü veri olabilir. Bu içerikleri anlamak için doğru araçlar kullanılmalıdır. Blog madenciliği ile yazılmış yazıları analiz edilmesi, firmaları müşterilerine daha yakınlaştıracağı gibi onların markaları, firmaları ve politik görüşleri hakkında da fikir elde edilmesini sağlamaktadır. Fakat bu analiz işlemi yoğun çaba ve zaman gerektiren bir iştir. Sezgisel olarak düşünüldüğünde, mevcut metinlere web madenciliği teknikleri uygulanabilir. Fakat birçok zorluktan dolayı bu teknikler doğrudan uygulanamaz. Bunun ilk nedeni blogların her gün hatta daha sık güncellenebilir olmasıdır. İkinci olarak ise yazarlar çok çeşitli konuları kapsayan, blogun genel konu bütünlüğü dışında yazılar yazabilir. Ayrıca, blog arama teknolojileri, genel amaçlı web aramaları kadar etkin değildir. Bundan dolayı, bloglar ve web sayfaları farklı madencilik teknikleri gerektiren özelliklere sahiptirler [1]. Technorati.com istatistiklerine göre 112.8 milyon blog bulunmakta ve her gün yaklaşık 1.6 milyon blog yazısı yayınlanmaktadır. Bloglar bazı durumlarda çevrimiçi dergi olarak da kullanılmaktadırlar. Bunun yanında eğitim ve öğretimde, uygulanabilir eğitim kaynakları olarak da eskiye göre daha fazla ve daha sık olarak kullanılmaktadırlar [2]. Bloglar, internet ekosistemindeki kişilerin birbirleri ile iletişime geçmesinde ve sosyalleşmesinde açık bir kanal oluştururlar. Aynı zamanda pazarlama konusunda da etkin bir iletişim kaynağıdırlar. Dahası, blog dünyasında metin tabanlı blog yazılarını, kişi profillerini, resimlerini ve medya kaynaklarını içeren çok miktarda veri bulunmaktadır [3]. 5 Bloglar temelde yazılma amaçlarına göre sınıflandırılabilirler. Fakat blog yazmaya devam ettirebilmek için 5 ana motivasyon kaynağı vardır: blog yazarının hayatını anlatmak, yorum ve görüşlerini sunmak, derin duygularını ifade etmek, yazı yolu ile fikirlerini belirtmek ve topluluk forumları kurarak onlara bakmak ve idare etmektir. Günlük olarak kullanılan bloglara kişisel blog denir. Yorum ve görüşlerin sunulduğu bloglara konu blogları denir. Tartışmanın olduğu ve günlük olayların münazara edildiği ve fikirlerin yazarak açık bir şekilde ifade edildiği veya topluluk forumlarının bulunduğu bloglara ise güncel bloglar denmektedir [1]. Blog yazarları diğer bloglara, yorum, hyperlink ve TrackBack kullanarak link verebilirler. Bu teknolojiler, yazarların okurları ile iletişime geçmesine izin vereceği gibi blog dünyasındaki iletişimleri de belli bir biçime oturtmakta ve bir kalıba sokmaktadır [1]. Besleme(Zengin Site Özeti), blog yazarlarının kullandığı diğer önemli özelliklerden birisidir. Bir internet kullanıcısı beslemeler yardımı ile belli blog ve anahtar kelimelere abone olurlar ve daha sonra tek bir kaynaktan tüm ilgili içeriklere ulaşabilirler. Kullanıcılar, sadece beslemeleri kullanarak son blog yazılarına kolayca ulaşabilir ve paylaşabilirler [1]. Bir çok blog sistemi, yazarlarına, yazılarını sınıflandırmak için birden fazla anahtar kelime ile etiketlendirme izni verir. Örneğin bir yazı, “web” ve “güvenlik” şeklinde etiketlenmiş olarak görülebilir. Bu her bir etiket, kendisine etiketlenmiş yazıların listelendiği bir sayfaya bağlanır. Sitede bulunan bir menü, ilgili blogun tüm etiketlerini listeler. Eğer bir yazı yanlış sınıflandırıldıysa, yazar etiket listesini tekrar güncelleyebilir [2]. 2.1. Veri Madenciliği Çalışmaları Tomoyuki Nanno ve çalışma arkadaşları, Japonya için, blog içeriklerini toplama ve izleme konusunda hazırladıkları bir mimari sunmuşlardır. Diğer bazı araştırmacılar 6 ise web üzerindeki müşteri fikir ve değerlendirmelerini pazarlamacılar için analiz eden çalışmalar yapmışlardır. Ancak, bu araştırmacılar yaptıkları sistemleri blog içeriklerini toplama ve web sayfası metin madenciliği için yapmışlardır. Bu nedenle ilgili çalışmalar blog madenciliği çalışmalarına doğrudan uygulanamaz. Michael Chau ve arkadaşları yaptıkları çalışma ile blog madenciliği problemi ve bu konu üzerindeki uygulamaların çeşitli alanlardaki uygulanabilirliğinin tartışılması üzerinde çalışma yapmışlardır. Yaptıkları çalışma ile ilgili örnekler ile blog madenciliğinin iş dünyası, yönetim ve sosyal konular üzerinde nasıl yardımcı olacağını çözümlemeyi amaçlamışlardır [1]. Tsai Chen ve arkadaşlarının çalışmalarında bloglardaki ek değişkenler hesaba katılmadan var olan veri madenciliği yöntemleri kullanılmıştır. Flora S. Tsai’nin çalışmasında ise geleneksel web ve metin madenciliğinden farklı olarak blog, içerisindeki farklı parametreleri de hesaba katarak bir çalışma yapmıştır ve çalışmasının sonuçlarını geleneksel yöntemler ile kıyaslamıştır [2]. Mita K. Dalal ve Mukesh A. Zaveri spor blogları üzerinde otomatik bir metin sınıflandırma algoritması üzerinde çalışmışlardır. Yaptıkları çalışma ile çeşitli spor blogları içerisindeki içeriği sınıflandırmışlardır. Bu sınıflandırma işlemi sırasında Naive Bayes sınıflandırma algoritmasını kullanmışlardır. Sonuç olarak da test verileri üzerinde yapılan denemeler ile %87 başarı elde edilmiştir. Yapılan çalışmada ilk olarak kelime ve kelime grupları spor blogları içerisinden ayrıştırılmıştır. Daha sonra tabu kelimeler temizlenmiştir. Ardından kelime ve kelime gruplarının dökümanlar içerisindeki ağırlıkları hesaplanmıştır. Sonraki adımda ise Naive Bayes kullanılarak veriler eğitilmiştir. Son aşamda da test verisi üzerinde test sınıfları uygulanarak çalışma sonlandırılmıştır. Kelime ve kelime gruplarının ağırlıklarını hesaplamada TF-IDF(Term Frequency - Inverse Document Frequency) yöntemi kullanılmıştır. Bu yöntem, kelime ve kelime gruplarının döküman içerisindeki ağırlıklarını ve frekanslarını kullanarak herbir kelime ve kelime grubu için bir değer üretmektedir. TF-IDF yöntemi, genellikle arama motorlarında kullanılmaktadır. Bunun yanı sıra, metin özetleme ve sınıflandırma problemlerinde tabu kelime çıkarımında da başarıyla uygulanmaktadır [3]. 7 3. VERİ MADENCİLİĞİ Veri madenciliği, veri analizi, yeni bilginin keşfi ve özelleşmiş karar verme mekanizmaları gibi yeni teoriler, teknikler ve geniş hacimli veri işleme araçları sunan, gelişmekte olan bir alandır. Veri madenciliği ve bilgi keşfi, özellikle elektronik ticaret, bilim, tıp, iş ve eğitim alanlarındaki uygulamalarda yeni ve temel bir araştırma sahası olarak ortaya çıkmaya başlamıştır. Veri madenciliği, eldeki yapısız veriden, anlamlı ve kullanışlı bilgiyi çıkarmaya yarayacak tümevarım işlemlerini formülle analiz etmeye ve uygulamaya yönelik çalışmaların bütününü içerir. Geniş veri kümelerinden desenleri, değişiklikleri, düzensizlikleri ve ilişkileri çıkarmakta kullanılır. Bu sayede, web üzerinde filtrelemeler, DNA sıraları içerisinde genlerin tespiti, ekonomideki eğilim ve düzensizliklerin tespiti, elektronik alışveriş yapan müşterilerin alışkanlıkları gibi karar verme mekanizmaları için önemli bulgular elde edilir [4]. Bir çok şirket, işlerini daha etkili yürütebilmek için bilgi teknolojilerini keşfetmiştir ve kritik bir çok bilgi veritabanı sistemlerine kaydedilmiştir. Bu verinin yoğunluğu gün geçtikçe de artış göstermektedir. Bir çok organizasyon ise pazarlama stratejileri, yatırım ve politikalarında rehberlik etmesi konusunda bu büyük veri yığını içerisindeki değerli içeriklere henüz ulaşamamaktadır. Bunun en büyük nedeni bu bilgilerin büyük veri yığınları içerisinde üstü kapalı bir şekilde durmasıdır. Şirketlerin bu üstü kapalı bilgiye ulaşması adına veri madenciliği rehber rolü oynamaktadır [5]. Veri madenciliği, karar yapıları, satış stratejileri, finansal tahminler gibi bir çok alanda uygulanabilirliğinden dolayı son yıllarda veritabanı uygulayıcılarının ve araştırmacılarının büyük ilgisini çekmektedir. İstatistik, makine öğrenimi, veritabanları gibi tekniklerin kombinasyonu ile veritabanlarındaki kullanışlı ve değerli bilginin ortaya çıkmasına yardım etmektedir [6]. 8 Ticari veritabanları genellikle geçmişteki bilgilerin tutulduğu kritik iş bilgileri içermektedir. Bu bilgiler geleceği tahmin etmek için kullanılabilir. Organizasyonlar yıllarca bir çok geleneksel ve modern istatistiksel modelleri kullanmışlardır. Veri madenciliği, ticari veritabanlarındaki tahmin sonuçlarını geliştirme potansiyeline sahip yeni teknolojiler getirmektedir [6]. Veri madenciliği, veri setlerinde bulunan, ilk bakışta görünemeyen, ancak belirli istatistiksel ve matematiksel algoritmalar kullanılarak ortaya çıkarılan gizli veririnin belirlenmesi ve sınıflandırılması sürecidir. Veri madenciliğini istatistiksel yöntemlerin bulunduğu işlemler serisi olarak görülür. Fakat istatistikten farklı olarak insanın da içinde bulunduğu bir süreç söz konusudur. Başka bir deyişle, veri madenciliği, verilerin içerisindeki desenlerin, ilişkilerin, değişimlerin, düzensizliklerin, kuralların ve istatistiksel olarak önemli olan yapıların yarı otomatik olarak keşfedilmesidir [7]. 3.1. Veri Madenciliği Süreçleri Veri madenciliği işlemlerinde kullanılacak veri her zaman ilk alındığı hali ile kullanılmayabilir veya istenilen özelliklerde olmayabilir. Verinin ilk hali gürültülü, yanlış veya eksik halde olabilir. Bunun önüne geçmek ve algoritmaların veriyi daha net anlamalarını sağlamak için bir dizi işlem uygulanır. Veri madenciliği süreçleri 6 adımdan oluşmaktadır. Bunlar [8]: 1. Veri temizleme 2. Veri bütünleştirme 3. Veri indirgeme 4. Veri dönüştürme 5. Veri madenciliği algoritması uygulama 9 6. Sonuçları sunma ve değerlendirme. 3.1.1. Veri temizleme Seçilen veri kümesinde tutarsız, hatalı ve eksik veriler bulunur. Bu tarz veriler gürültü olarak adlandırılır. Bu gürültülü veriler uygulanacak olan algoritmanın tutarsız ve istenmeyen sonuçlar vermesine neden olur. Bu durumu engellemek için birkaç farklı işlem uygulanır. Eksik değerlerin içeren kayıtlar veri setinden silinir. Kayıp değerler için sabit bir değer kullanılarak diğer gruplardan farkı gözlenir. Örneğin NULL, geçersiz gibi değerler verilir. Eksik değerler elle doldurulabilir. Fakat bu işlem uzun ve zaman alıcıdır. Eksik değerler içeren tamamlanabilir. Genelde, niteliğin ortalama değeri ortalama değer kullanmak ile veriyi doğru veri sonuçlar verebilir. En olası değer ile eksik veri tamamlanabilir. Bu metod için regresyon, Bayesian ya da karar ağaçları kullanılabilir. 3.1.2. Veri bütünleştirme Bazı durumlarda veri tek bir kaynakta bulunmayabilir. Örneğin veri 2 ayrı veritabanında olacağı gibi farklı veritabanı sistemlerinde de bulunabilir. Hatta bir kısmı veritabanında bulunurken diğer kısmı metin bazlı tutulmuş olabilir. Veri bütünleştirme süreci ile farklı kaynaklardaki veriler birleştirilerek uygulamanın tek bir veri kaynağını kullanıyor olması sağlanır. Aksi durumda, uygulama farklı kaynakları kullanarak gereksiz zaman ve işgücü kullanımına neden olacaktır [8]. 10 3.1.3. Veri indirgeme Veri madenciliği uygulamalarında bazen çözümleme işlemi uzun sürebilir. Bu durumda elde bulunan veriler içerisinde tekrarlı, niteliksiz, ilgisiz veriler çıkarılır. Bunun yanında çözümlemeden elde edilen sonucun değişmeyeceği düşünülüyorsa veri sayısı veya değişkenlerin sayısı da azaltılabilir. Böylece hem çözümleme işlemi kısa sürer hem de daha net ve doğru sonuçlar elde edilir [8]. 3.1.4. Veri dönüştürme Bazı durumlarda veriyi uygulamaya aynen katmak uygun olmayabilir. Veri setindeki en alt ve en üst değerlerin çok yüksek olması diğer değerlerin sonucunu etkileyeceği ve değişkenlere olan baskıları daha fazla olacağı için bu veriler normalize edilirler. Böylece değerler arasındaki uçurum azaltılarak algoritmanın daha doğru sonuç vermesi sağlanmış olur. Veri dönüştürme süreçlerinde Min-Max Normalleştirme ve Z-score Standartlaştırma gibi algoritmalar kullanılır [8]. 3.1.5. Veri madenciliği algoritmasının uygulanması Yukarıda anlatılan süreçlerden veri kümesine uygun olanlar yapıldıktan sonra aynı veri kümesine uygun algoritma seçilerek veri madenciliği algoritması uygulama sürecine geçilir. Bu algoritmalar ve uygulama süreci daha sonraki kısımlarda anlatılacaktır. 3.1.6. Sonuçları sunma ve değerlendirme Veri madenciliği algoritması uygulandıktan sonra sonuçlar alınır ve bu sonuçlar açıklayıcı bir şekilde, grafiklerle desteklenerek sunulur. 11 3.2. Veri Madenciliği Teknikleri Veri Madenciliği teknikleri denetimli ve denetimsiz olmak üzere ikiye ayrılmaktır. Denetimli öğrenmede eğitim verileri vasıtasıyla bir öğrenme işleminin yapılması gerekmektedir. Yani kullanılan eğitim verilerinden bazı kurallar ve etiketler çıkarılarak daha sonraki test sürecinde bu kurallar ve etiketler doğrultusunda sonuçlara gidilir. Veri tabanlarındaki gizli örüntüleri ortaya çıkarmakta kullanılır. Var olan veritabanının bir kısmı eğitim için kullanılır ve böylece sınıflandırma kuralları belirlenir. Bu kurallar yardımıyla yeni bir durum ortaya çıktığında nasıl karar verileceği belirlenir. Denetimsiz öğrenmede ise denetimli öğrenmedeki eğitim ve etiketlem durumu geçerli değildir. Kesinlik içermez. Veriler, kendi aralarındaki benzerlikler göz önüne alınarak gruplandırılırlar. Pazarlama araştırmalarında yaygın olarak kullanılmaktadırlar. Bunun yanı sıra desen tanımlama, resim işleme ve uzaysal harita verilerinin analizinde kullnılmaktadırlar. Çeşitli veri madenciliği yöntem ve teknikleri mevcuttur. Bazı temel yöntem ve teknikler aşağıdaki gibi listelenmiştir. 1. Karar ağaçları 2. Yapay sinir ağları 3. Genetik algoritma 4. K-en yakın komşu algoritması 5. Birliktelik kuralı 6. Naive Bayes 12 3.2.1. Karar ağaçları Karar ağaçları en yaygın sınıflandırma algoritmalarından birisidir. Diğer algoritmalardan farklı olarak ortaya kurallar çıkartıp bu kurallara bağlı olarak sonradan kullanılan veriyi sınıflandırabilmektedir. Karar ağaçları, makine öğrenme ve veri madenciliği genel sınıflandırma mimarilerinden birisi olarak kabul edilmektedir. Bu kavramın oluşturulmasından sonra, önemli sayıda karar ağacı analiz ve sentez çalışmaları yapılmıştır. Bu çalışmalar daha gelişmiş karar ağaçlarının inşası ve yorumlanması için, bulanık mantık da dahil olmak üzere farklı teknikler içermektedir [9]. Diğer yandan, karar ağaçları kural kümesine kolayca oturtulabilen algoritmalardır. Anlaşılması kolay bir algoritmadır. Buna rağmen, bazı karışık uygulamalarda tipik bir karar ağacının çok fazla alt dalı ve bu dalların çok fazla düğümü olabilir [10]. Karar ağacı sınıflandırıcıları, örüntü tanıma, kavram öğrenme ve diğer makine öğrenimi alanlarında popüler olmuştur. Bu sınıflandırıcı, sınıflandırma problemlerinin uygulanabilirliği konusunda parçalamalı ve kazanımlı bir stratejiye olanak vermiştir [11]. Karar ağacı, bir örneği, kökten yaprağa kadar inceleyerek sınıflandırır. Karar ağaçlarının öğrenme algoritmaları, bir hipotezi sunmak için bir küme karar ağacı kullanırlar. Öğrenme kümesinde, ham veri incelenerek mümkün olan en iyi şekilde sınıflandırılır. Algoritma bu işlemi özyinelemeli olarak tekrar eder ve en son ortaya çıkardığı karar ağacı en son hipotezi oluşturur. İdeal olan karar ağacı, öğrenme kümesi dışındaki verilerde de aynı kuralları oluşturur ya da az hata payıyla aynı hipotez sonuçlarını ortaya çıkartır [12]. Küçüksille şöyle demektedir [13]: 13 “Karar ağaçları kurulumlarının ucuz olması, kolay yorumlanabilmeleri, veri tabanı sistemleri ile kolayca entegre edilebilmeleri nedenleri ile veri madenciliği sınıflama modelleri içerisinde en yaygın kullanılan tekniktir. Karar ağaçları tahmin etmede kullanılan bir tekniktir. Karar ağaçları aynı zamanda kural çıkarma algoritmalarıdır. Bu algoritmalar bir veri kümesinden kullanıcıların çok kolay anlayabileceği “eğer-doğruysa” (IF-THEN) türündeki kuralları bir ağaç yapısında türetebilirler”. 3.2.2. Yapay sinir ağları Yapay sinir ağları, temel olarak beynin çalışmasını taklit ederek bir öğrenme gerçekleştirir. Basit bir biyolojik sinir sisteminin çalışma şeklinden esinlenilmiştir. Bu sinir hücreleri nöron denilen yapıları içerirler ve bu nöronlar birbirlerine bağlanarak ağı oluştururlar. Giriş değerlerinden çeşitli kuralları öğrenirler ve bilinmeyen örüntüleri ortaya çıkararak parametreleri bir sonraki veriye aktarırlar. Yapay sinir ağları 3 kısımdan oluşmaktadır. Bunlar: Dış dünyadan gelen girdilerin alındığı ve aldığı bu verileri alt katmanlara ileten giriş katmanı, Giriş katmanından gelen verileri alan çıkış katmanına ileten ara katmanı, Ara katmandan gelen verileri alıp işleyerek çıktıları üreten ve bu verileri dış dünyaya gönderen çıkış katmanıdır. Bazı yapay sinir ağlarında ara katman bulunmayabileceği gibi bazılarında birden fazla da olabilir. Ara katmandaki nöron sayıları giriş ve çıkış sayısından bağımsızdır. Nöron sayısının fazlalığı, hesaplama karmaşası ve sürenin uzamasına neden olabileceği gibi yapay sinir ağlarının daha karmaşık problemleri çözmesini de sağlamaktadır. 14 Yapay sinir ağları, çağrışımlı bellek, desen sınıflandırması, ve optimizasyon problemleri gibi çeşitli alanlarda başarılı örnekleri bulunmaktadır. Bu uygulamalar, yapay sinir ağlarının dinamik yapısına yoğun bir şekilde bağlıdırlar [14]. 3.2.3. Genetik algoritma Genetik algoritma, John Holland tarafından 1975 yılında geliştirilen özyinelemeli bir arama tekniğidir. Doğal seçilim mekanizmasının bilgisayar bilimlerine uyarlanmış halidir. Optimizasyon ve arama problemleri gibi zaman alıcı konularda yaklaşık bir çözüm sunar. Genetik algoritmanın ana amacı, her bir nesildeki sonuçlardan kötü olanları kaldırıp iyi olanlara devam edilmesi böylece ekosistemin sürekli olarak iyileştirilmesini temel almaktadır [15]. Genetik algoritmada olası çözümler kromozom tarafından sunulur ve genellikle ilk çözüm rastgele üretilir. Kromozomlar yani bireyler birlikte bir dizi çözüm ekosistemini oluştururlar. Uygunluk işlemi ise başta düzgün bir şekilde tanımlanır. Bu uygunluk fonksiyonu bireylerin kalitesini taşıyan bir çözüm barındırır [15]. Yeni ve iyi çözümler oluşturmak için, genetik algoritma seleksiyon, çaprazlama ve mutasyon operatörlerini kullanır. Yeni nesil üretmek için kullanılan çaprazlama ve mutasyon operatörleri, birey seçim mekanizması tarafından ekosistemden seçilen 2 bireye uygulanır [15]. Küçüksille şöyle demektedir [13]: “Genetik algoritmalar çözüme ulaşmak için rassal arama tekniklerini kullanır ve değişken kodlama esasına dayalı bir tekniktir. Genetik algoritmalar, farklı poblemlere göre doğru parametreler ile çalışıldığı takdirde ideale yakın çözümler verir. Bu noktada amaç, doğal sistemlerin uyum sağlama özelliğini dikkate alarak yapay sistemlerini oluşturmaktır”. “Bilinen optimizasyon yöntemleri ile çözülemeyen ya da çözümü çok zaman gerektiren problemler için kullanılan genetik algoritma optimal ya da optimale yakın 15 çözüm vermektedir. Başlangıçta doğrusal olmayan optimizasyon problemlerine uygulanan genetik algoritma sonraları gezgin satıcı, karesel atama, yerleşim, çizelgeleme, tasarım gibi optimizasyon problemlerinde başarıyla uygulanmıştır”. Genetik algoritmalar optimizasyon problemlerinde kullanıldığı gibi, sınıflandırma ve veri madenciliğinde kullanılan diğer algoritmaların uygunluğunu test etmek ve değerlendirmek için de kullanılabilirler [16]. Genetik algoritmalar aynı zamanda yönlendirme problemleri, Çinli postacı problemi, zamanlama problemleri, gezgin satıcı problemleri gibi zor ve çözümü uzun süren problemlerde ideale yakın sonuçlar vermektedir [17]. 3.2.4. K-en yakın komşu algoritması K-en yakın komşu algoritması, veri bölümlendirilmesine ve gruplandırılmasına dayalı bilinen bir algoritmadır. Buna rağmen, kullanıcının küme sayısını başlangıçta belirtmesi gerekliliği, başlangıç koşullarındaki hassasiyeti gibi bazı eksiklikleri mevcuttur. Hiyerarşik değildir. Veri seti ne kadar geniş olursa sonuç bulması için geçen süre de o kadar artmaktadır. K-en yakın komşu algoritmasının performansını artırmak için, çok geniş bir yelpazede farklı metotlar uygulanmaktadır [18]. K-en yakın komşu algoritmasının geniş bir kullanım alanı mevcuttur. Temel olarak amaç, sınıfı belli olan bir veri setinden yararlanarak, daha sonra gelecek olan verinin hangi sınıfa dahil olacağını bulan temel bir sınıflandırma algoritmasıdır. Sınıflandırmada verilerin birbirlerine olan ağırlıklarının uzaklıkları dikkate alınmaktadır. Algoritmadaki k değeri, belirlenen noktaya komşu olan kayıtların sayısını gösterir. Verilen N adet eğitim setinin doğru sınıflandırılmasına göre, algoritma yeni gelen test verisini en yakın komşu gruba yerleştirir. Sınıflandırmanın doğruluğu k değerinin artmasına ve azalmasına bağlı olarak değişir. Arttığı taktirde doğruluk oranı da artar. Algoritmanın olumsuz yanlarından birisi de gürültülü veriye neden olması ve geçmişe yönelik veriye ihtiyaç duyulmasıdır [12]. 16 3.2.5. Birliktelik kuralı Birliktelik kuralı ile büyük veri kümeleri arasındaki birliktelik ilişkileri bulunur. Depolanan verilerin gün geçtikçe artması, büyük şirket ve kurumların, bu veriler arasındaki ilişkileri bulması gerekliliğini ortaya çıkarmıştır. Bu belirlenen birliktelikler, şirketlerin ve kurumların karar alma süreçlerini doğrudan etkilemektedir. Birliktelik kuralı, kullanılması ve anlaşılması en kolay algoritmalardan birisidir. Bu nedenle finans sektöründen telekomünikasyon sektörüne, pazarlama, perakendecilik, elektronik ticaret gibi farklı sektörlerde aktif olarak kullanılmaktadır [18]. Birliktelik kuralına verilebilecek en güzel örnek market sepet analizi uygulamasıdır. Birliktelik kuralı ile müşterilerin satın alma alışkanlıkları analiz edilir. Örneğin süt alan müşterilerin daha sonra ne aldıkları belirlenirse, market içerisindeki değişim, kampanyalar gibi müşterileri satın almaya yöneltecek uygulamalar ona göre değişiklik arz eder [19]. Birliktelik kuralı, tıp alanında hastalık tahminlerinin gelişimi üzerinde büyük potansiyeli olan bir veri madenciliği tekniğidir [20]. Birliktelik kuralı, market sepet analizi gibi büyük veri setlerindeki yer alan ilişkileri ortaya çıkarmada kullanılan bir uygulamadır. Bu durum birliktelik kuralının resim üzerindeki sık dokuların ortaya çıkarılmasında da kullanılacağını göstermiştir [21]. 3.2.6. Naive Bayes Naive Bayes, değişkenler arasındaki ilişkiyi analiz eden tahminci ve tanımlayıcı bir sınıflandırma algoritmasıdır. Naive Bayes, verinin öğrenilmesi esasına dayanmaktadır. Yani eğitimde kullanılan veriler, modelin öğrenilmesi için her çıktının kaç kere meydana geldiğini hesaplar. 17 Bu değer öncelikli olasılık olarak adlandırılır. Hesaplamalar sırasında her bir bağımsız değişkenin bağımlı değişkenlere bölümünün kombinasyonu olayın meydana gelme sıklığını bulur. Bu da veri kümesinden yapılacak tahmin için kullanılır [22]. Naive Bayes, metin kategorilendirmesi konusunda bilinen ve sıklıkla kullanılan bir algoritmadır. Hedef fonksiyon için bir eğitim veri seti belirlenir, nitelik değerleri tarafından tanımlanan yeni örneklemler sunulur ve öğrenici sınıf hedef değeri veya sınıfı tahmin eder [23]. Sınıflandırma önemli bir veri madenciliği problemidir. Girdiler, eğitim setinin bir veri kümesidir. Bu veri kümesindeki her bir verinin bir çok özniteliği vardır. Sayı alanı içeren özniteliklere sayısal öznitelik, sayı içermeyen özniteliklere sahip alanlara ise kategorik öznitelik denmektedir. Ayrıca sınıf etiketi isimli fark edilebilir bir öznitelik daha vardır. Bu sınıflandırma, etiketsiz kayıtlar içerisinde, sınıf etiketini tahmin etmekte kullanılabilecek kısa bir model oluşturmayı hedefler. Naive Bayes, K-en yakın komşu algoritması, karar ağaçları ve yapay sinir ağları gibi bir çok sınıflandırma modelleri bu yapıyı amaç edinmiştir [6]. Naive Bayes sınıflandırıcısı, kategorik verileri sınıflandırma konusunda basit ve hızlı bir tekniktir. Bayes sınıflandırıcıları klasik değişkene bağlı sınıflandırıcılardır. Eğitim verileri için belirli bir olasılık dağılımı uygun kabul edilir. Naive Bayes sınıflandırıcısı, ilgili eğitim setinde bulunan her bir bağımsız öznitelik arasındaki ilişkiyi ve her bir ilişki içerisindeki şartlı olasılığı çıkarmak için analiz eder. Tahmin işlemi, bağımsız değişkenlerin, bağımlı değişkenler üzerindeki etkilerini bir araya getirerek yeni bir durumu sınıflandırmak için yapılır [6]. Naive Bayes tekniğinin kullanıldığı sınıflandırma adımları şu şekildedir: Eğitim süreci sırasında, her bir sonucun önceki olasılığı eğitim seti içerisinde ilgili kategoride kaç kere geçtiğinin sayısı olarak belirlenir. Örneğin, 5 şartın olduğu bir durumda, ilk sonuç 2 kere geçmiş ise ilgili sonucun olasılığı 0.4’dür. Önceki olasılıklara ek olarak, her bir bağımsız özniteliğin her bir bağımlı öznitelik içersinde 18 kaç kez geçtiğini de hesaplamaktadır. Bu frekans değeri, hesaplanan olasılık değerlerinin her birinin çarpımı birleşimi ile çarpılarak oluşturulan şartlı olasılık değerlerini hesaplamak için kullanılır [6]. Naive Bayes algoritması en bilindik sınıflandırma algoritmalarından birisidir. Birçok araştırmacı bu yaklaşımın kuramsal ve deneyimsel sonuçları üzerinde çalışmışlardır. Veri madenciliği uygulamalarında geniş ölçüde kullanılmaktadır ve birçok uygulamada sürpriz bir şekilde iyi sonuçlar vermiştir. Buna rağmen, Naive Bayes öğreniminde bütün özelliklerin eşit sayılması varsayımı nedeniyle, yapılan tahminler yetersiz kalmaktadır. Örneğin, bir kişinin diyabet hastası olup olmadığının tahmini problemi konusunda, kişinin kan basıncı, kişinin boyundan daha önemlidir. Bu nedenle, Naive Bayes algoritmasının performansı hafifletici varsayımlar ile iyileştirilir [24]. Bayes sınıflandırıcısı şu şekilde ifade edilir: X örnek veri seti olsun. Bu X değerlerinin sınıfı bilinmemektedir. X test veri seti X = {X1, X2, X3, …, Xn} değerlerinden oluşsun. Sınıf değerleri ise C1, C2, C3, …, Xn şeklinde olduğu kabul edilsin. Sınıfı belirlenecek test verisinin olasılığı şu şekilde hesaplanır: (3.1) Çıkan sonuçlardan ise en büyük değere ait olan sınıf test verisinin ait olduğu sınıfı verir. arg maxci {P(X | Ci) P(Ci)} 19 Çalışma için yapılan uygulamanın temelinde de Naive Bayes algoritması kullanıldığı için ilgili algoritma ile ilgili detaylı bir örnek verilmiştir. Örnek uygulamada kullanılan değerler çizelge 3.1'deki gibidir. Çizelge 3.1. Örnek veri kümesi Başvuru Eğitim Yaş Cinsiyet Kabul 1 Orta Yaşlı Erkek Evet 2 İlk Genç Erkek Hayır 3 Yüksek Orta Kadın Hayır 4 Orta Orta Erkek Evet 5 İlk Orta Erkek Evet 6 Yüksek Yaşlı Kadın Evet 7 İlk Genç Kadın Hayır 8 Orta Orta Kadın Evet Yukarıdaki eğitim verisi ele alınarak aşağıdaki şartın hangi sınıfa ait olduğu bulunmaktadır. X1 : Eğitim = Yüksek X2 : Yaş = Orta X3 : Cinsiyet = Kadın Bayes olasılıklarını hesaplamak amacıyla çizelge tekrar düzenlenir. Düzenlenen çizelge Çizelge 3.2'de verilmektedir. 20 Çizelge 3.2. Örnek veri kümesinin olasılık tablosu Nitelikler Nitelik değeri Evet sayısı Evet olasılığı Hayır sayısı Hayır olasılığı Eğitim İlk 1 1/5 2 2/3 Orta 3 3/5 0 0 Yüksek 1 1/5 1 1/3 Genç 0 0 2 2/3 Orta 3 3/5 1 1/3 Yaşlı 2 2/5 0 0 Erkek 3 3/5 1 1/3 Kadın 2 2/5 2 2/3 Yaş Cinsiyet Her bir girdi için Bayes olasılıkları tek tek hesaplanır. C1 : Kabul = Evet C2 : Kabul = Hayır Yukarıdaki değerler hesaplandığında sonucu büyük olan değer örneğin ait olduğu sınıfı verecektir. P(X | C1) P(C1) Değerinin Hesaplanması Burada P(X | Kabul = Evet) koşulunun olasılığı hesaplanmalıdır. Bunun için de X = {x1, x2, x3, …, xn} değerlerinin olasılıkları ayrı ayrı bulunmalıdır. (3.2) (3.3) (3.4) 21 O halde; (3.5) olarak bulunur. P(Kabul = Evet) olasılığı ise; (3.6) Sonuç olarak ise; (3.7) şeklinde hesaplanır. P(X | C2) P(C2) Değerinin Hesaplanması Burada P(X | Kabul = Hayır) koşulunun olasılığı hesaplanmalıdır. Bunun için de X = {x1, x2, x3, …, xn} değerlerinin olasılıkları ayrı ayrı bulunmalıdır. (3.8) (3.9) (3.10) O halde; 22 (3.11) olarak bulunur. P(Kabul = Hayır) olasılığı ise; (3.12) Sonuç olarak ise; (3.13) şeklinde hesaplanır. arg maxci {P(X | Ci) P(Ci)} = max{(0,03), (0.0275)} = 0,03 Bu durumda örnek verinin ait olduğu sınıf 0.03 değerinin sınıfı yani Evet sınıfına ait olduğu anlaşılır. X1 : Eğitim = Yüksek X2 : Yaş = Orta X3 : Cinsiyet = Kadın şeklinde bir şart geldiğinde bunun sınıfı Evet olacaktır. 3.3. Veri Madenciliği Kullanım Alanları Veri madenciliği özellikle son yıllarda pazarlamadan, bankacılığa, müşteri ilişkilerinden e-ticarete, sosyal ağ analizinden satış kampanyalarına kadar çok farklı sektörlerde aktif bir şekilde kullanılmaktadır. Pazarlama, satış konularında müşteri segmentasyonu sağlanarak, kişiye uygun pazarlama kampanya ve aktiviteleri yapılır. Bu sayede satışların artırılması, müşteri sadakati gibi yararlı geri dönüşler sağlanır. 23 Bankacılık alanında ise kredi geri ödemesi yapmamaya yatkın müşterileri belirleme, risk derecelendirme gibi konular için önem arz etmektedir. Bahsedilen bu alanların dışında veri madenciliği, astronomi, biyoloji, finans, sigorta, tıp, internet gibi birçok alanda da uygulanmaktadır [25]. Veri madenciliği farklı alanların farklı alt dallarında ve konularında kullanılmaktadır. Pazarlama alanı ile iligli aşağıdaki konularda ve problemlerde kullanılmaktadır: Müşterilerin satın alma örüntülerinin belirlenmesi Müşterilerin demografik özellikleri arasındaki bağlantıların bulunması Mevcut müşterilerin elde tutulması, yeni müşterilerin kazanılması Market sepeti analizi Çapraz satış analizi Müşteri ilişkileri yönetimi Müşteri değerlendirme Satış tahmini Bankacılık alanı ile iligli aşağıdaki konularda ve problemlerde kullanılmaktadır: Farklı finansal göstergeler arasında gizli korelasyonların bulunması Kredi kartı dolandırıcılıklarının tespiti Kredi kartı harcamalarına göre müşteri gruplarının belirlenmesi Kredi taleplerinin değerlendirilmesi Usulsüzlük tespiti Risk analizleri ve yönetimi Sigortacılık alanı ile iligli aşağıdaki konularda ve problemlerde kullanılmaktadır: Yeni poliçe talep edecek müşterilerin tahmin edilmesi 24 Sigorta dolandırıcılıklarının tespiti Riskli müşteri örüntülerinin belirlenmesi Perakendecilik alanı ile iligli aşağıdaki konularda ve problemlerde kullanılmaktadır: Satış noktası veri analizleri Alışveriş sepeti analizleri Tedarik ve mağaza yerleşim optimizasyonu Borsa alanı ile iligli aşağıdaki konularda ve problemlerde kullanılmaktadır: Hisse senedi fiyat tahmini Genel piyasa analizleri Alım-satım stratejilerinin optimizasyonu Telekomünikasyon alanı ile iligli aşağıdaki konularda ve problemlerde kullanılmaktadır: Kalite ve iyileştirme analizi Hisse tespiti Hatların yoğunluk tahmini Sağlık ve ilaç alanı ile iligli aşağıdaki konularda ve problemlerde kullanılmaktadır: Test sonuçlarının tahmini Ürün geliştirme Tıbbi teşhis Tedavi sürecinin belirlenmesi Endüstri alanı ile iligli aşağıdaki konularda ve problemlerde kullanılmaktadır: 25 Kalite kontrol analizi Lojistik Üretim süreçlerinin optimizasyonu Bilim ve mühendislik alanı ile iligli deneyimsel veriler üzerinde modeller kurarak bilimsel ve teknik problemlerin çözümlenmesi probleminde kullanılabilmektedir. Eğitim alanı ile iligli aşağıdaki konularda ve problemlerde kullanılmaktadır: Öğrenci davranışlarının öngörülmesi Öğrencilerin ders seçme eğilimlerinin belirlenmesi [20]. 26 4. BLOG İÇERİKLERİNİN SINIFLANDIRILMASI Blog içeriklerinin sınıflandırılması uygulaması temelde 8 bölümden oluşmaktadır. Bunlar: 1. Üzerinde çalışılacak kategorilerin belirlenmesi 2. Eğitim kümesinin oluşturulacağı blog listelerinin kategorilere göre oluşturulması 3. Veritabanı yapısının oluşturulması 4. Belirlenen blogların içeriklerinin çekilerek veritabanına kaydedilmesi 5. Eğitim verisinin oluşturulması 6. Naive Bayes algoritmasının uygulanması 7. Test verileri ile uygulamanın sınanması 8. Test sonuçlarının yayınlanması 4.1. Kategorilerin Belirlenmesi Kategori, birbirleri ile ilgili ve ilişkili blogların bulunduğu sınıflara verilen isimdir. Blog yazarları kendi ilgi alanlarına göre farklı kategorilerde blog içerikleri yazabilmektedirler. Bu çalışmada kategoriler, oluşturulacak eğitim kümesinin sınıflarını belirlerken, çalışmanın uygulama aşamasında kullanılacak olan test verisinin de hangi sınıfa ait olacağını belirlemektedirler. Bu çalışma içerisinde 8 adet kategori kullanılmıştır: 1. Moda 2. Ekonomi 3. Seyahat 4. Yemek 5. Teknoloji 27 6. Eğitim 7. Sağlık 8. Spor Kategori seçiminde, kullanılacak eğitim kümesinin olabildiğince net bir şekilde birbirlerinden ayrılmasına önem verilmiştir. Aynı zamanda güncel ve popüler kategorilerin seçilmesine de önem verilmiştir. 4.2. Kategorilere Göre Blog Listelerinin Oluşturulması Uygulamada kullanılan veri kaynakları tamamen kullanıcı kontrolünde belirlenen 8 adet kategoriye göre rastgele seçilen blog listelerinden oluşmaktadır. Blog seçiminde, blogun kategorinin içeriğine uygunluğu ve ilgili kategoriye olabildiğince çok kelime ve kelime grubu çıkarabilecek olmasına dikkat edilmiştir. Aynı zamanda seçilen blogun başka bir kategorinin altında olmaması da önemlidir. Kategorilere göre seçilen blogların, her bir kategorideki sayısının herhangi bir önemi yoktur. Sadece eğitim verisine yeterli dağılımda kelime ve kelime grubu oluşturmak amacıyla seçilmiştirlerdir. Toplamda 86 adet blog sayfası seçilmiştir. Bu blog sayfalarının kategorilere göre dağılımı Çizelge 4.1'de verilmiştir. 28 Çizelge 4.1. Kategorilere göre blog sayısı Kategori Blog sayısı Moda 1 Ekonomi 16 Seyahat 6 Teknoloji 3 Yemek 2 Sağlık 6 Spor 45 Eğitim 7 86 blog sayfasının alt sayfalarının toplamı ise 4119'dur. Blog alt sayfalarının kategorilere göre dağılımı Çizelge 4.2'de verilmiştir. Çizelge 4.2. Kategorilere göre blog yazısı sayısı Kategori Blog yazısı sayısı Moda 600 Ekonomi 953 Seyahat 459 Teknoloji 444 Yemek 199 Sağlık 485 Spor 427 Eğitim 552 Kategorilere göre farklı blog ve blog alt sayfa sayısının farklı olması, kategorilere ait olan kelime ve kelime grubu sayılarının dağılımının farklı olmamasının sağlanmasından kaynaklanmaktadır. Herhangi bir kategoriye ait bir blog sayfasından elde edilen kelime grubu sayısı kategorilere göre farklılık göstermektedir. Blog sayfa sayısının eşit olmasına çalışılması kategorilere atanacak kelime grubu sayısında farklılığa neden olmaktadır. Bu da uygulanan algoritmanın istenilen sonucu vermemesine neden olmaktadır. 29 4.3. Veritabanı Yapısının Oluşturulması Uygulamanın oluşturulmasında kullanılan yazılımlar aşağıdaki gibi listelenmektedir. İşletim sistemi: Windows ve Linux işletim sistemleri Veritabanı: MySQL Programlama dili: Java Kullanıcı arayüzü dili: JavaServer Pages(JSP) Sunucu: Apache Tomcat Programlama dili geliştirme yazılımı: Eclipse Veritabanı yönetim sistemi olarak MySQL üzerinde ilişkisel veritabanı yönetim sistemi kullanılmıştır. Bu sistem üzerinde veriler tablolarda satır ve sütunlar halinde tutulur ve yüksek bir veri tutarlılığına sahiptir. İlişkisel veritabanı sisteminde farklı tablolar üzerinde bulunan veriler, çeşitli anahtarlar vasıtası ile birbrilerine bağlanırlar. Bu anahtarlara yabancı anahtar denir. İlgili tablolarda, sütunlar arasında bir anahtar sütun yer alır. Bu anahtar sütun aracılığı ile birden çok tabloda bulunan veriler, birbirleri ile bağlantı sağlayabilir ve herhangi bir sorgulamada birlikte görüntülenebilir. Bu sistemi kullanan veritabanları arasında PostgreSQL, MySQL, Oracle vardır. İlişkisel veritabanı sistemleri, tekrarlı verilerin azaltılması, veritabanı hakimiyetinin yükseltilmesi, iş yükünü azaltması ve esneklik sağlaması gibi özellikleri de bulunmaktadır. İlişkisel veritabanlarında olabilecek 3 adet ilişki türü bulunmaktadır. 1. Bire bir(1:1) ilişki türü 2. Birden çoğa(1:n) ilişki türü 3. Çoktan çoğa(n:m) ilişki türü 30 Bire bir(1:1) ilişki türü Tablodaki yabancı anahtar, ilişki tablosundaki sadece 1 satıra denk gelmektedir. Birden çoka(1:n) ilişki türü Tablodaki yabancı anahtar, ilişki tablosundaki satırlarda birden çok satırda bulunmaktadır. Çoktan çoka(n:m) ilişki türü Tablodaki yabancı anahtar, kendi tablosunda birden çok kez bulunurken, ilişki tablosundaki satırlarda da birden çok satırda bulunmaktadır. Bu durum karmaşıklığıa neden olmaktadır. Bu nedenle bu iki tablo arasındaki ilişki kayıtları harici bir ilişki tablosunda tutulmaktadır. Bu tabloya bu iki tablonun kesişim kümesi de denebilmektedir. Bu tablo sayesinde karmaşıklığı giderilmiş olur Veritabanı tabloları arasındaki ilişkiler aşağıdaki gibidir: Blog tablosu ile category tablosu arasından birden çoka Blog tablosu ile keyword tablosu arasında çoktan çoka Category tablosu ile keyword tablosu arasında çoktan çoka Blog tablosu ile post tablosu arasında çoktan çoka Bütün tablolarda id alanları bulunmaktadır. Bu alan, bulunduğu tablonun kayıt numarasını tutmaktadır. Herbir içerik kaydedildiğinde otomatik olarak artmaktadır. integer veri tipindedir. Herbir tabloda bulunmaktadır. Bu nedenle herbiri için tek tek anlatılmamaktadır. Blog tablosu, editör tarafından seçilen blog bilgilerinin tutulduğu tablodur. Tablonun yapısı Şekil 4.1'de verilmektedir. 31 Şekil 4.1. Blog tablosunun yapısı Blog tablosunda bulunan link alanı, tabloya kaydedilen test verisinin web sayfası linkini tutmaktadır. Veri tipi varchar'dır. Uzunluğu 255 karakterdir. Status alanı, girilen blog verisinin aktif olup olmadığı bilgisini tutmaktadır. Enum veri tipindedir. Bu alana ait veriler ya active ya da passive olarak kaydedilmektedir. Category tablosu seçilen kategorilerin tutulduğu tablodur. Tablonun yapısı Şekil 4.2'de verilmektedir. Şekil 4.2. Category tablosunun yapısı Category tablosunda bulunan title alanı, kategorinin adını tutmaktadır. Varchar veri tiğindedir. Uzunluğu 32 karakterdir. Num alanı ise ilgili kategoride geçen kelime ve kelime gruplarının kategorilerde geçme toplamlarının tutmaktadır. Integer veri tipindedir. Uzunluğu 11 karakterdir. Uygulanacak algoritmada T değerine karşılık gelmektedir. Post tablosu bloglara ait olan yazıların linklerinin tutulduğu tablodur. Tablonun yapısı Şekil 4.3'de verilmektedir: 32 Şekil 4.3. Post tablosunun yapısı Blog_id alanı, blog tablosundaki id alanı ile ilişkilidir ve ilgili post'un hangi blog ile ilişkli olduğunu göstermektedir. Integer veri tipindedir. Uzunluğu 11 karakterdir. Varsayılan olarak 0 belirlenmiştir. Yani herhangi bir blog_id verisi gelmediğinde veritabanı otomatik olarak 0 kaydetmektedir. Link alanı, post verisinin url bilgisini tutmaktadır. Content alanı ise post içeriğinin kendisini kaydetmektedir. Oluşturulacak eğitim kümesi için kullanılmaktadır. Title alanı, ilgili içeriğin başlık bilgisini tutmaktadır ve content alanında olduğu gibi eğitim verisinin oluşturmak için kullanılmaktadır. Link, content ve title alanları text veri türüne sahiptir. 65 535 adet karakter uzunluğundadır. Status alanı enum tipindedir ve dört farklı durum söz konusudur. Eğer post bilgisinin status alanı active ise, kullanılan web-crawler link alanında bulunan post linkini kullanarak web sayfası içeriğini alıp content ve title alanına kaydetmek için hazır durumda olduğunu göstermektedir. Parsed durumunda ise ilgili content ve title bilgisi alınıp kaydedilmiş demektir. Status alanının fetched olarak bulunması durumunda, content ve title alanları kelime ve kelime gruplarına ayrıştırılarak keyword tablosuna kaydedilmiş durumdadır. Passive durumunda ise bu kayıt ile herhangi bir işlem yapılmayacak anlamına gelmektedir. Keyword tablosu her bir kelime ve kelime grubunun satırlar halinde tutulduğu tablodur. Tablonun yapısı Şekil 4.4'de verilmektedir. 33 Şekil 4.4. Keyword tablosunun yapısı Keyword tablosunda bulunan title alanı, ilgili kelime veya kelime grubunun bilgisini tutmaktadır. Varchar veri tipine sahiptir ve en fazla 255 karakter uzunluğundadır. Oluşturulmakta olan eğitim verisinin de kayıtlı olduğu alandır. Length alanı title alanında bulunan verinin uzunluğunu bulundurmaktadır. Smallint tipindedir ve 4 karakter uzunluğundadır. Word_count alanı ise title verisinin kaç kaç kelimeden oluştuğu bilgisini tutmaktadır. Tinyint veri tipine sahiptir ve 1 karakter uzunluğundadır. Blog_category tablosu, bloglar ile blogların ilişkilendirildikleri kategorilerin kayıt numaralarının birbirleri ile n:m şekilde ilişkilendirildikleri tablodur. Tablonun yapısı Şekil 4.5'da verilmektedir. Şekil 4.5. Blog_category tablosunun yapısı Category_id, category tablosunda id alanını karşı gelmektedir. Blog_id alanı ise, blog tablosundaki id alanına karşılır gelmektedir. İki alan da Integer veri tipine sahiptir ve en fazla 11 karakter uzunluğunda olabilmektedirler. Varsayılan olarak 0 almaktadırlar. 34 Blog_keyword tablosu, seçilen bloglar ile bu bloglardan alınan her bir kelime ve kelime grubunun ilişkisini tutan tablodur. Tablonun yapısı Şekil 4.6'da verilmektedir. Şekil 4.6. Blog_keyword tablosunun yapısı Blog_id alanı, blog tablosundaki id alanına, keyword_id alanı ise keyword tablosundaki id alanına karşılık gelmektedir. İki alan da Integer veri tipine sahiptir ve en fazla 11 karakter uzunluğunda olabilmektedirler. Varsayılan olarak 0 almaktadırlar. Num alanı ise keyword verisinin ilgili blogda kaç kez geçtiğinin sayısını tutmaktadır. Integer veri tipindedir ve varsayılan 1'dir. Category_keyword tablosu, seçilen kategoriler ile bu kategorilere göre alınan her bir blog içerisinden çıkan kelime ve kelime grubunun ilişkisini tutan tablodur. Category tablosundaki id alanı ile keyword tablosundaki id alanları ilişkilidir. Tablonun yapısı Şekil 4.7'de verilmektedir: Şekil 4.7. Category_keyword tablosunun yapısı Category_id alanı, category tablosundaki id alanına, keyword_id alanı ise keyword tablosundaki id alanına karşılık gelmektedir. İki alan da Integer veri tipine sahiptir ve en fazla 11 karakter uzunluğunda olabilmektedirler. Varsayılan olarak 0 35 almaktadırlar. Num alanı ise keyword verisinin ilgili blogda kaç kez geçtiğinin sayısını tutmaktadır. Integer veri tipindedir ve varsayılan 1'dir. Post_test tablosu algoritma uygulandıktan sonra girilen test verilerinin kaydedildiği tablodur. Tablonun yapısı Şekil 4.8'de verilmektedir. Şekil 4.8. Post_test tablosunun yapısı Blog_id alanı, blog tablosundaki id alanı ile ilişkilidir. Integer veri tipindedir ve 11 karakter uzunluğundadır. Eğer girilen içerik herhangi bir blog ile ilişkili ise, ilgili blogun id'si buraya kaydedilir. Link alanı, tabloya kaydedilen test verisinin link bilgisini tutmaktadır. Content alanı ise, test edilen verinin kendisini tutmaktadır. Title alanı, girilen test verisinin başlık kaydını tutmaktadır. Zorunlu değildir. Status alanı enum tipindedir. Girilen kayıdın aktif olup olmadığı bilgisini tutmaktadır. Link, content ve title alanları text veri tipindedir. 65 535 karakter uzunluğundadır. Post_test_puan tablosu, post_test tablosuna kaydedilen test verilerinin birincil anahtarı ile test yapan kullanıcı tarafından verilen puanın kaydedildiği tablodur. Tablonun yapısı Şekil 4.9.'da verilmektedir. Şekil 4.9. Post_test_puan tablosunun yapısı 36 Post_test_id alanı, post_test tablosunun id alanındaki veri ile ilişkilidir. Puan alanı, test işlemi sonucunda 1 ile 5 arasında verilen puanın tutulduğu alandır. Her iki alan da integer veri tipindedir ve 11 karakter uzunluğundadır. Varsayılan olarak 0 almaktadırlar. Test_content tablosu, her bir kategori için belli oranlarda seçilen test verilerinin kaydedildiği tablodur. Tablonun yapısı 4.10.'da verilmektedir. Şekil 4.10. Test_content tablosunun yapısı Url alanı, kaydedilen test içeriğinin kayıtlı web adresine karşılık gelmektedir. Content alanı web adresinde bulunan içeriğin yani blog yazarının yazmış olduğu yazının tutulduğu alandır. Sentence_count alanı, alınan içeriğin kaç adet cümleden oluştuğunu tutmaktadır. Puan alanı, test içeriği algoritma tarafından sınıflandırıldıktan sonra sınıflandırmaya verilen puanın kaydedildiği alandır. Category_id alanı ise kaydedilen web adresi içeriğinin hangi kategoriye ait olduğunun bilgisini tutmaktadır. 4.4. Blog İçeriklerinin Kaydedilmesi Editör kontrolünde seçilen blogların içerikleri, Java kodu kullanılarak yazılmış olan Apache Nutch isimli bir web-crawler ile çekilerek metin formatlarında depolanmaktadır. Web-crawling, internet üzerindeki bilgilerin, metodolojik olarak ve otomatik şekilde, düzenli bir sıra ile toplanmasını sağlayan bilgisayar programlarıdır. Web 37 örümceği(web spiders), web robotu, otomatik dizinleyici, olarak da isimlendirilmektedirler. Yahoo, Google, Bing gibi arama motorları benzer teknolojileri kullanarak çalışmaktadırlar. Apache Nutch olarak da bilinen Nutch, Java ile yazılmış açık kaynak bir yazılım projesidir. Nutch'ın çalışması için öncelikle sunucu bilgisayar üzerinde Java'nın kurulu olması gerekmektedir. Linux işletim sistemi üzerinde Nutch kurmak ve websitesi içeriklerini çekmek için sırası ile şu adımlar uygulanır: 1. Nutch binary kurulum paketi http://www.apache.org/dyn/closer.cgi/nutch/ adresinden indirilir. 2. $HOME/nutch-1.X/ dizini oluşturulur ve indirilen paket açılarak Nutch dosyaları bu dizin altına yerleştirilir. 3. $HOME/nutch-1.X/runtime/local dizini içerisinde program uygulaması çalıştırılımalıdır. Bu dizin içerisinde bulunan bin/nutch dosyasına chmod +x bin/nutch komutu ile execute yetkisi verilir. 4. Conf/nutch-site.xml konfigürasyon dosyası açılarak kullanılacak webcrawler'ın user-agent değeri verilir. Bu değer crawl edilecek websitesinin l oglarında hangi user-agent tarafından ziyaret edildiğini gösteren isimdir. Google, Yahoo gibi arama motorlarının web-crawler'ları da benzer isimler kullanmaktadırlar. Projeye uygun olarak "Blog Miner" ismi verilmiştir. 5. $HOME/nutch-1.X/runtime/local dizini içerisinde urls isimli bir dizin oluşturulur. Bu dizin içerisine web-crawler'ın crawl edeceği websayfalarının listesi oluşturulmaktadır. Herbir websitesi alt alta gelecek şekilde listelenir. 6. Eğer herhangi bir websayfasının crawl edilmesi istenmiyorsa conf/regexurlfilter.txt dosyası açılarak # accept anything else satırının hemen altındaki satıra +. yerine +^http://([a-z0-9]*\.)*nutch.apache.org/ yazılır. Nutch.apache.org websayfası yerine içeriğinin alınması istenmeyen herhangi bir web sayfası adı yazılabilir. 38 7. Bin/nutch crawl urls -dir crawl -depth 3 komutu ile urls dizini altındaki websayfaları crawl edilerek binary halinde crawl dizini içerisine kaydedilir. -dir parametresi crawl listesinin crawl edildikten sonra verilerin kaydedileceği dizini gösterir. Burada crawl dizini gösterilmiştir. -depth parametresi ise crawl edilen websitesi içerisinde kaçıncı derinliğe kadar gidileceği verilir. 8. Binary formatında crawl dizini içerisine kaydedilen verilerin kullanılabilmesi için bu halde bulunması yeterli değildir. Veriler metin formatına çevrilerek kullanılabilir hale getirilmesi gerekmektedir. Bu işlem için bin/nutch readseg -dump crawl/segments/*/ dump/ -nocontent -nofetch -nogenerate -noparse koutu kullanılmaktadır. Bu komut crawl/segments/ dizini altında bulunan tüm dizinleri ayrıştırarak metin formatına çevirmektedir. Uygulamada kullanılan kategorilerin herbirinin blog listeleri urls dizini altına kaydedilmiş ve içerikler yukarıdaki yöntemler ile metin formatı haline getirilmiştir. Yazılan Java kodu ile bu içerikler ayrıştırılarak title ve content bilgileri post tablosuna kaydedilmiştir. 4.5. Eğitim Verisinin Oluşturulması Her bir blogun içeriği alındıktan sonra, bu içerikler bir kelime, iki kelime ve üç kelime olacak şekilde parçalara ayrılmıştır. Parçalara ayırma işlemi sırasında bazı kurallara dikkat edilmiştir. Bu kurallar şu şekilde sıralanabilir: “.”, “,”, “-”, ”;” gibi tüm noktalama işaretleri içeriklerden temizlenmiştir. İki harfli kelimeler ve ekler gürültülü veriye neden olacağı için eğitim kümesine dahil edilmemiştir. Kelime seçimi yapılırken fiil, isim, sıfat, ünlem, zarf türlerine ait olan kelimeler kullanılmış; edat, bağlaç, zamir kelime türüne ait olan kelimeler kullanılmamıştır. Kullanılmayan kelime türleri eğitim kümesinde kullanılması durumunda algoritmayı beklenmeyen sonuçlar verebileceği gibi 39 veritabanında fazladan yer kullanılmasına neden olacağı için maliyet ve zaman artışına neden olmaktadır. Herhangi bir sınıfa girmeyen ve gürültülü veriye neden olacak olan bağlaç ve edatlar eğitim kümesine eklenmemiştir. "Ve", "ile", "için", "çünkü", "veya", "da", "de", "kez", "ama", "ya", "dahi", "mi", "mı", "hiç", "in", "her", "şey", "bu", "kaç", "nın", "nin", "nun", "nün", "vs", "vb", "aynı", "ilk", "son", "aha", "ahacık", "dek", "denli", "nasıl", "lere", "başka", "beli", "beri", "bilfarz", "değin", "derece", "doğru", "evet", "gibi", "ha", "hayır", "he", "ila", "işte", "kadar", "kelli", "mesela", "oldu", "olur", "örneğin", "gelimi", "gelişi", "temsili", "tamam", "temsil", "üzere", "üzre", "yok", "mısın", "misin", "musun", "müsün", "mi", "mu", "mü", "amma", "velakin", "ancak", "belki", "bile", "bre", "eğer", "fakat", "gelgelelim", "hâlbuki", "hatta", "hele", "hem", "kim", "lakin", "madem", "mademki", "meğer", "meğerki", "meğerse", "neyse", "oysa", "oysaki", "şayet", "velev", "veyahut", "yahut", "yalnız", "yani", "yoksa", "zira", "acaba", "bana", "bazı", "ben", "benden", "beni", "benim", "biri", "birşey", "birşeyi", "biz", "bizden", "bizi", "bizim", "buna", "bunda", "bundan", "bunu", "bunun", "daha", "defa", "diye", "ler", "lar", "çok", "iyi", "kötü", "siz", "onlar", "bizler", "sizin", "sizinkiler", "bizimkiler", "onlarınkiler", "sitemap", "ki", "da", "da", "na", "ya", "he", "in", "de", "gerek", "var", "ileri", "hergün", "kendi", "önce", "içeri", "dışarı", "artık", "tüm", "fazla", "eski", "yeni", "pek", "ara", "belli", "sürekli", "uzun", "hakkımızda", "iletişim", "üzeri", "hakkında", "gore", "göre", "değil" kelimeleri eğitim kümesine dahil edilmemiştir. Kelimelerin köklerine göre ayrıştırılması işlemi gerçekleştirilmiştir. Post tablosuna kaydedilen blog içerikleri 1, 2 ve 3 kelimelik kelime gruplarına ayrılarak keyword tablosuna kaydedilmektedir. Fakat bu işlem için öncelikle kelimelerin köklerinin bulunması gerekmektedir. Kelimeler yapım ve çekim ekleri ile kaydedildiği taktirde gürültülü veriye neden olmaktadır. Kelimeleri köklerine ayırmak için de Zemberek isimli Türkçe'nin dil yapısına uygun olarak hazırlanmış doğal dil işleme kütüphanesi kullanılmıştır. 40 Bilgi teknolojileri alanındaki bir çok doğal dil işleme uygulaması Hint-Avrupa dilleri temel almaktadır. Eklemeli dillerin genel sorunlarından dolayı ve halihazırda Türkçe kökenli dillere yönelik herhangi bir doğal dil işleme çalışması olmamasından dolayı bu yönde bir çalışma gereksinimi hissedilmiştir. Çalışmaya Türkçe dili ile başlanmasına rağmen, Zemberek, Türkçe ve Türkçe kökenli dillere uygun genişletilebilir bir açık kaynak kodlu proje boşluğunu kapatmayı amaçlamaktadır [26]. Zemberek projesinin eski adı Tspell 1999 yılında basit bir prototip olarak C++ dili altında geliştirilmeye başlanmıştır. Projeye verilen uzunca bir aradan sonra 2004 yılında tekrar yazılarak, bu defa Java ile hayata geçirilmiştir. Projenin adı 2004 sonbaharinda Zemberek olarak değiştirilmiştir. Zemberek’in, aynı zaman Open Office isimli kelime işlemcisi içerisine yerleştirilmiş bir versiyonu da bulunmaktadır. Bu versiyon orijinal Zemberek’e göre biraz daha kısıtlanmıştır. Zemberek, yapım ve çekim ekine sahip bir kelimenin eklerini ayırarak kelimenin kökünü bulmaktadır. Aynı zamanda yapım eki ile türetilmiş kelimeleri de vermektedir. Örneğin “konuştuklarımız” kelimesi ele alınırsa aşağıdaki gibi bir sonuç çıkmaktadır. [ Kok: konuş, FIIL ] Ekler: FIIL_BELIRTME_DIK + ISIM_COGUL_LER + ISIM_SAHIPLIK_BIZ_IMIZ [ Kok: kon, FIIL ] Ekler: FIIL_BERABERLIK_IS + FIIL_BELIRTME_DIK + ISIM_COGUL_LER + ISIM_SAHIPLIK_BIZ_IMIZ Sonuçlarda da görüldüğü üzere “konuştuklarımız” kelimesinin kökleri olan “konuşmak” ve “kon-mak” fiilleri Zemberek yardımıyla bulunmuştur. 41 Köklerine ayrılan kelimler 3 farklı şekilde ele alınarak veri tabanındaki keyword tablosuna eklenmiştir. 1. Tek kelime 2. İki kelimeden oluşan tamlamalar 3. Üç kelimeden oluşan tamlamalar Kelime ve kelime grupları ayrıştırma işlemi sırasında uzunlukları ve kelime sayıları da hesaplanarak ilgili satırdaki length ve word_count alanlarına kaydedilmiştir. Keyword tablosuna eklenen kelime ve kelime grupları aynı zamanda post tablosunda kayıtlı olan blog_id ile birlikte ve o blog_id'de kaç kere geçtiğinin bilgisi de tutularak blog_keyword tablosuna kaydedilmektedir. Bu sayede bir sonraki aşamada oluşturulacak olan kategorik verilerin de temeli bu kısımda atılmış olmaktadır. Eğer bir kelime ilgili bloga ilk kez ilişkilendirilecekse num alanına 1 olarak kaydedilmektedir. İlgili bloga o kelime veya kelime grubu için bir kere daha ekleme yapıldığında num içerisindeki değer bir artırılmaktadır. Bu değer ne kadar çoksa o kelimenin ilgili blogun ilişkili olduğu kategorideki geçme sayısı da o kadar fazla ollur. Böylece kategori için ayırt edici kelime grupları da belirlenmiş olur. Algoritmanın çalıştırılabilmesi için eğitim kümesi kategorilere bölünerek oluşturulmak zorundadır. Bunun için de kategorilere bağlanmış olan blogların ilgili kelimelerin geçme adetlerinin toplamları ile birlikte category_keyword tablosuna kaydedilmesi gerekmektedir. Blog_keyword tablosunda veriler blog_id, keyword_id ve num alanları tutulmaktadır. Num alanı ilgili keyword_id'nin herhangi bir blog içerisinde geçme sayısını tutmaktadır. 42 Yazılan Java kodu ile kategorilere göre bölümlendirilmiş blogların herbirinde geçen kelimelerin toplamları alınarak category_keyword tablosuna kaydedilmektedir. Herhangi bir kelime blog_keyword'de birden fazla kere bulunabilirken category_keyword tablosunda o kelime ilgili kategoride bir kez geçmektedir. Bu satır o kelime veya kelime grubunun kategorideki geçme adedini göstermektedir. Bu veri bir sonraki aşamada uygulanacak olan algoritmanın da temelini oluşturmaktadır. Örneğin “internet” kelimesini ele alacak olursak, keyword tablosundaki id'si 10 363'dür. blog_keyword tablosunda keyword_id = 10363 şeklinde bir sorgu gönderdiğimizde 40 sonuç alınmaktadır. "internet" kelimesine göre blog_keyword tablosunun sonuçları Şekil 4.11'da verilmektedir. Şekil 4.11. “İnternet” kelimesine ait blog_keyword tablosu kayıtları Category_keyword tablosunda “internet” kelimesi ile ilgili bir sorgu yaptığımızda seçmiş olduğumuz 8 adet kategori ile ilişkili sonuçlarını görmekteyiz. Bu sonuçlar içerisinde ilgili kategorilerin id'leri, internet kelimesinin id'si ve ilgili kategori içerisindeki geçme sayıları vardır. "internet" kelimesine göre blog_keyword tablosunun sonuçları Şekil 4.12'de verilmektedir. 43 Şekil 4.12. “İnternet” kelimesine ait category_keyword tablosu kayıtları Sonuçlara göre “internet” kelimesi teknoloji kategorisinde 1360 defa geçmektedir. Sırası ile ekonomi kategorisinde 338, seyahat kategorisinde 148, eğitim kategorisinde 115, spor kategorisinde ise 46, sağlık kategorisinde 44, yemek kategorisinde 18 ve son olarak da moda kategorisinde 16 defa geçmektedir. “İnternet” kelimesinin teknoloji kategorisinde en çok bulunduğu görülmüştür. Veri ayrıştırma işleminin sonucunda kelimeler tek, iki kelime ve üç kelimelik kelime grupları halinde ayrıştırılmıştır. Toplamda 5 902 347 adet eğitim verisi bulunmaktadır. Ayrıştırılan kelime ve kelime gruplarının sayısı Çizelge 4.3.'de verilmiştir. Çizelge 4.3. Kelime grubu türlerine göre kayıt sayısı Kelime grubu Adet Bir kelime 236 651 İki kelime 2 239 586 Üç kelime 3 426 110 Toplam 5 902 347 Ayrıştırılan kelimelerin bloglarının kategorileri belli olduğu için bu kelimeler otomatik olarak blogun ait olduğu kategorinin de örnek veri kümesini oluşturmaktadırlar. Buna göre kategorilere göre kelime sayısı kolayca 44 hesaplanabilmektedir. Kelime ve kelime gruplarının kategorilere göre dağılımı Çizelge 4.4'de verilmiştir. Çizelge 4.4. Kategorilere göre kelime sayısı Kategori Bir kelime İki kelime Üç kelime Moda 4 902 16 794 18 429 Ekonomi 17 988 81 019 81 383 Seyahat 11 838 54 675 55 569 Teknoloji 17 580 99 405 111 030 Yemek 19 333 89 219 105 300 Sağlık 11 116 56 290 57 817 Spor 15 247 68 036 66 430 Eğitim 16 888 73 009 73 406 Eğitim verileri hazırlandıktan sonra kullanıma hazır hale getirilmiştir. Bu aşamada Naive Bayes sınıflandırma algoritmasının uygulanmasına geçilmiştir. Bu uygulamada Naive Bayes sınıflandırma algoritması Java programlama dili ile programlanarak uygulamaya konulmuştur. 4.6. Naive Bayes Algoritmasının Uygulanması Algoritma temel olarak kullanıcıdan aldığı içeriği, önce kelimelerine, daha sonra her bir kelimeyi köküne kadar alarak kategoriler içerisinde geçme oranlarını Naive Bayes yöntemi ile bulmaktadır. Girilen test verisi, eğitim verisini oluştururken kurulan mantık ile aynı şekilde çalışmaktadır. Test verisi 1, 2 ve 3 kelimelik kelime grupları halinde ayrıştırılmaktadır. Girilen test verisinin içerisinde 3 kelimelik kelime grubunun olması ve sınıflandırma için kullanılmaması durumunda algoritma 1 ve 2 kelimelik kelime gruplarının ağırlıklarına göre algoritmayı uygular. Bu durum algoritmanın istenmeyen bir sonuç vermesine neden olmaktadır. 45 Algoritmanın uygulanma süresi boyunca kullanılacak eşitliklerde aşağıdaki sabitler kullanılmaktadır: C: Kategori T: Herbir kategoride geçen kelime ve kelime gruplarının geçme toplamları K: Kategorinin toplam içerik içerisindeki ağırlığı P: Girilen içeriğin kategorideki ağırlığı k: Kelime veya kelime grubunun kategoride geçme toplamı F: Kelime veya kelime gruplarının kategoride geçme toplamlarının toplamı n: Kelime veya kelime grubunun kategorideki ağırlığı i: Algoritmaya girecek toplam kelime ve kelime grubu sayısı c: Toplam kategori sayısı f: 0 değer problemini çözmek için kullanılan katsayı, buradaki değeri 1 r: f/i değeri fr: f * r Test işlemi süresince kategorilerin toplam kelime toplamları aynı olmaktadır. Test verisinin her çalışmasında bu veri tekrar hesaplanmamakta, daha önceden hesaplanarak veritabanında category tablosunun num alanına kaydedilmektedir. Çizelge 4.5'de bahsedilen verilerin listesi verilmektedir. 46 Çizelge 4.5. Kelimelerin kategorilerde geçme toplamlarının her bir kategorideki toplam sayısı Kategori Toplam Moda 1 006 720 Ekonomi 1 040 463 Seyahat 1 004 312 Teknoloji 1 243 514 Yemek 1 040 885 Sağlık 1 127 614 Spor 857 338 Eğitim 1 036 718 Genel Toplam 8 357 564 Tabloya göre T değeri de hesaplanarak bir değişkene atanmaktadır. Buna göre T değeri aşağıdaki şekilde hesaplanmaktadır: (4.1) Eş. 4.1'e göre T değeri aşağıdaki gibidir: Herbir kategorinin K yani kategori ağırlık değeri, kendi T değerlerinin toplamdaki T değerine bölünmesi ile elde edilmektedir. Bu ifade Eş. 4.2'de gösterilmiştir. (4.2) Herbir kategori için Eş. 4.2 tek tek uygulandığında ağırlıklar bulunmaktadır. Çizelge 4.6'da kategorilerin ağırlıkları verilmektedir. 47 Çizelge 4.6. Kategorilerin ağırlıkları Kategori Ağırlık (K) Moda 0.1204561520557904 Ekonomi 0.1244935725290288 Seyahat 0.1201680298230441 Teknoloji 0.1487890490578355 Yemek 0.1245440657110134 Sağlık 0.1349213718255702 Spor 0.1025822835457796 Eğitim 0.1240454754519379 Tek kelimelik bir test verisi olarak "internet" kelimesi kullanılmaktadır. Girilen test verisi bir tabu kelime olmadığı için olduğu gibi kullanılacaktır. Herhangi bir noktalama işareti de bulunmamaktadır. Yapım ya da çekim ekine sahip olmadığı için Zemberek kütüphanesi içerisinden herhangi bir kelime üretilmeyecektir. Sonraki adımda "internet" kelimesinin kategoriler içerisinde toplam geçme adetleri hesaplanmaktadır. Çizelge 4.7'da internet kelimesinin kategorilerde geçme oranları verilmektedir. Çizelge 4.7. "İnternet" kelimesinin kategorilerdeki geçme toplamları internet Moda Ekonomi Seyahat Teknoloji Yemek Sağlık Eğitim Spor 16 338 1360 18 44 115 46 148 F değeri ise Eş. 4.3'de hesaplanmaktadır. (4.3) Algoritmaya göre herbir içeriğin, kategorilere göre tek tek ağırlıkları bulunacak ve kategorinin toplamdaki ağırlığı ile çarpılıp girilen içeriğin kategoriye göre ağırlığı hesaplanacaktır. Fakat bulunmaktadır. 0 Naive değerleri Bayes çarpımı uygulamalarında etkileyeceği için 0 değer istenilen problemi sonuca 48 ulaşılamamaktadır. 0 değeri olasılıkların etkisini yok etmekte ve sonucu anlamsız kılmaktadır. Bu durumu önlemek için f gibi bir değer her bir orana eklenmektedir. Burada f, 0 ile 1 arasında bir sayıdır. Genellikle 1 tercih edilmektedir. Ayrıca f değeri, r değeri ile çarpılması gerekmektedir. r değeri muhtemel değerlerin toplamının 1'e bölümüne eşittir. Yani girilen test içeriğinde bulunan 1 adet kelimeye bölünmektedir [27]. Bu açıklama aşağıdaki şekilde formülize edilmektedir: f =1 i=1 (4.3) (4.4) (4.5) Herbir kategori için test içeriğinin n değerinin yani kategorilerdeki ağırlığının bulunması gerekmektedir. Toplam kategori sayısı c = 8 olduğu için döngü 8 kere çalışmakta ve test içeriğinin kategori ağırlıklarını hesaplamaktadır. Fakat bu süreç sadece teknoloji kategorisi için anlatılmaktadır. (4.6) Eş. 4.6'da test verisinin teknoloji kategorisinde nasıl hesaplandığı gösterilmektedir. Bu eşitlikten çıkılarak "internet" kelimesinin n değeri teknoloji kategorisi için aşağıdaki şekilde hesaplanmaktadır. 49 (4.7) Eş. 4.6'ya göre değerler yerlerine konulduğunda teknoloji kategorisinin P değeri aşağıdaki gibi hesaplanmaktadır. (4.8) Herbir kategori için aynı işlem uygulanır. Bu işlemler sonucunda hesaplanan kategori oranları Çizelge 4.8'de verilmektedir. Çizelge 4.8. "İnternet" kelimesinin kategorilerdeki geçme oranları internet Moda Ekonomi Seyahat Teknoloji Yemek Sağlık Eğitim 0 0.02023 0.00858 0.09707 0 0.00291 0.00689 0.00231 Spor Hesaplanan oranlara göre teknoloji kategorisinin toplam yüzdesi %69, ardından gelen ekonomi kategorisinin oranı ise %14 olarak hesaplanmaktadır. Diğer kategorilerin oranları ise seyahat %6, eğitim %4, sağlık %2 ve spor %1'dir. Girilen test içeriğinin teknoloji kategorisine ait olduğu görülmektedir. Cümle örneği olarak "Turizm firmalarının indirimleri yazın gelmesi ile başladı." şeklindeki bir test verisi kullanılmaktadır. Bu içerik öncelikle noktalama işaretlerinden arındırılmaktadır. Buna göre cümlenin sonundaki "." işareti kaldırılmakta ve içeriğin son hali "Turizm firmalarının indirimleri yazın gelmesi ile başladı" şeklinde olmaktadır. Cümle içerisindeki gürültülü verinin temizlenmesi ile birlikte "ile" bağlacı çıkarılmaktadır. İçerik " "(boşluk) karakterine göre kelime kelime ayrılmaktadır. Herbir kelime Zemberek kütüphanesi yardımı ile köklerine kadar bulunmaktadır. Bu uygulamanın ardından içeriğin son hali aşağıdaki gibi olmaktadır: [turizm, turizm firma, indir, yazın, başla, gel, firma] 50 Yukarıda da görüldüğü üzere içerik 1 ve 2 kelimelik kelime gruplarına ayrılmakta, yapım ve çekim eklerinden temizlenerek en sadece haline getirilmektedir. Kategorilerin ağırlıkları Çizelge 4.6'da hesaplanmaktadır. Bu nedenle tekrar anlatılmasına gerek yoktur. T değeri de Eş. 4.1'de hesaplanmaktadır. Bu adımda ise test verisinde bulunan kelime gruplarının kategorilerde geçme toplamları hesaplanmaktadır. Bu bilgiler category_keyword tablosundan alınmaktadır. 8 kategori için döngü oluşturulmaktadır. category_id ve keyword_id' alanlarına göre test verilerinin kategorilerde geçme toplamları hesaplanmaktadır. Çizelge 4.9'da test verilerinin kategorilerde geçme toplamları verilmektedir. Çizelge 4.9. Cümle şeklinde girilen test verisinde bulunan kelime ve kelime gruplarının kategorilerdeki geçme toplamları turizm turizm firma indir yazın başla gel firma Moda 2 30 648 34 105 341 22 Ekonomi 386 4 395 248 267 552 462 Seyahat 10 209 26 121 30 193 471 685 Teknoloji 0 0 340 171 509 1 261 371 Yemek 5 0 25 206 195 701 12 Sağlık 0 0 38 32 800 716 4 Eğitim 21 0 373 34 372 450 18 Spor 3 0 36 26 422 672 20 Sonraki adımda ise herbir kelime ve kelime grubunun F değerinin hesaplanması gerekmektedir. F değeri Eş. 4.3'de olduğu gibi hesaplanmaktadır. Kelime ve kelime gruplarının F değerleri Çizelge 4.10'da verilmektedir. Çizelge 4.10. Cümle şeklinde girilen test verisinde bulunan kelime ve kelime gruplarının toplam geçme toplamları k turizm turizm firma indir yazın başla gel firma F 10 626 30 1 976 781 2 863 5 164 1 594 51 Çizelge 4.9'a bakıldığında 0 değer probleminin girilen test verisi için yaşanacağı görülmektedir. Bu nedenle f, r ve fr değerleri hesaplanmaktadır. f=1 i=7 (4.9) (4.10) Son adımda ise tüm kelime ve kelime grupları herbir kategori için Eş. 4.6 ve 4.7'deki işlemler tek tek uygulanır. Bu işlem sırasında kategoriler için döngü 8 kere çalışmaktadır. Test verisi için ise 7 kere çalışmakta ve kategorilerin olasılık değerlerini hesaplamaktadır. Kelime ve kelime gruplarının kategorilerde geçme olasılıkları Çizelge 4.11'de gösterilmektedir. Çizelge 4.11. Cümle şeklinde girilen test verisinde bulunan kelime ve kelime gruplarının kategorilerdeki oranları turizm turizm firma indir yazın başla gel firma Moda Ekonomi Seyahat Teknoloji Yemek Sağlık Eğitim Spor 0.0002 0.0046 0.3278 0.0436 0.0367 0.0660 0.0138 0.036336 0.133641 0.19987 0.317318 0.093276 0.106901 0.289745 0.9606 0.8433 0.0612 0.0385 0.0674 0.0912 0.4295 0.000013 0.004608 0.17205 0.218853 0.177773 0.244171 0.232691 0.0004 0.0046 0.0127 0.2636 0.0681 0.1357 0.0076 0.0000 0.0046 0.0192 0.0411 0.2793 0.1386 0.0025 0.0019 0.0046 0.1887 0.0436 0.1299 0.0871 0.0113 0.0002 0.0046 0.0182 0.0334 0.1473 0.1301 0.0126 Eş. 4.8'e göre herbir kategorinin K değeri ile kelime ve kelime gruplarının kategorilere göre hesaplanan n değerleri çarpılır ve kategorilerin P değerleri hesaplanır. Bulunan P değeri yüzdesel olarak da hesaplanmakta ve en yakın kategoriden en uzak kategoriye göre sonuçlar listelenmektedir. Bu işlem sonucunda test verisi olarak girilen "Turizm firmalarının indirimleri yazın gelmesi ile başladı." içeriğinin en ilişkili olduğu kategori %84 oranı ile seyahat ve %15 oranıyla ekonomi takip etmektedir. Diğer 6 kategori ise sadece %1'lik bir oran almaktadır. 52 4.7. Kullanılan Test Yöntemleri ve Test Sonuçlarının Değerlendirilmesi Uygulamanın doğruluğunun test verileri ile sınanması için 2 farklı yöntem kullanılmaktadır. İlk yöntemde internet üzerinde bulunan bloglar içerisinden blog adresleri ve içerikleri rastgele olarak seçilip uygulama tarafından sınıflandırılmaktadır. Diğer yöntemde ise gene rastgele olarak alınan blog içerikleri paragraflarına göre ayrılmakta, bu ayrılan paragrafların her biri artan cümleler şeklinde veritabanına kaydedilerek test işlemi için kullanılmaktadır. Her iki yöntemin test edilmesi sonucunda ortaya çıkan sonuçlara kullanıcı tarafından puan verilmektedir. Bu puana göre de uygulamanın başarısı yüzdesel ifade ile belirtilmektedir. Değerlendirme işlemi 1 ile 5 arasında verilen puanlar ile gerçekleşmektedir. 5 puan en yüksek 1 puan ise en düşüktür. Kullanıcının 5 puan vermesi için çıkan kategori sonuçlarının içeriğe göre en iyi şekilde sıralanmış olması gerekmektedir. Bu mantık doğrultusunda puanlar 1'e kadar azaltılabilmektedir. Eğer sonuç içeriğe göre oldukça farklı ise 1 puan verilmektedir. İlk yöntemde rastgele seçilen blog içeriklerinin doğru sınıflandırılıp sınıflandırılmadığı test edilmektedir. Bu test süreci boyunca toplamda 772 Türkçe test verisi kullanılmıştır. Her test verisinin ait olduğu ihtimal kategoriler, en yakın olandan en uzak olana doğru sıralanmıştır. Kullanıcı algısına en yakın ve en doğru sonuca göre 5 puandan başlamak üzere 1 puana kadar puanlandırılmıştır. Toplam 800 test verisi kullanılmıştır. Test işlemi sonucunda çıkan sonuçlar Çizelge 4.12'de gösterilmektedir. Çizelge 4.12. Rastgele seçilen içerikler üzerinde uygulanan test işlemi sonucunda çıkan oranlar Puan 1 puan 2 puan 3 puan 4 puan 5 puan Adet 13 1 13 73 700 Oran 1.625 0.125 1.625 9.125 87.5 53 Kullanılan ikinci test yönteminde de ilk yöntemde olduğu gibi blog adresleri internet üzerinden rastgele olarak seçilmiştir. Fakat ilk yöntemden farklı olarak bu yöntem ile cümle sayısının artış ve azalışının uygulamanın sınıflandırma sonuçlarını ne gibi değiştirdiği gözlemlenmiştir. Seçilen bir blog içeriği ilk olarak paragraflarına ayrılmıştır. Her bir paragraftaki içerik ise anlam bütünlüğünü korumak amacı ile 1 cümle, 2 cümle, 3 cümle, 4 cümle, 5 cümle, ... n cümle olacak şeklilde ayrıştırılarak veritabanına kaydedilmiştir. Bir blog adresinden alınan iki örnek paragraf ile kullanılan test yöntemi detaylandırılmaktadır. Test içeriğinin ilk paragrafı aşağıdaki gibidir: "Bu Bodrum yazılarımın ilki değil, sanırım sonuncusu da olmayacak. Sadece eğlence değil, deniz, güneş ve huzur isteyenler de Bodrum’da harika bir tatil yapabilir düşüncesindeyim. Tabii sezonda Bodrum demek, yüksek fiyatlı uçak bileti, istediğin tarihlerde otellerde yer bulma sıkıntısı ve özellikle Cumartesi ve Pazar günleri plaj ve iskelelerde şezlong kalmaması sorunu olarak seni az da olsa mutsuz edebilir. Ama tüm bunlarla baş edebilirim dersen Bodrum’da bu yaz yeni yerler keşfetmene, yeni tatlar denemene vesile olabilirim.". Test içeriğinin 2. paragrafı aşağıdaki gibidir: "Ben Bodrum’da en çok Gölköy’ü seviyorum. Sıra sıra dizilmiş 15-20 odalı küçük otellerin (Beluga, Maritim, Velena, Sultan…) hepsinin önünde kendi iskeleleri var. Deniz şahane. İskeleler akşam restorana dönüşüyor, şezlonglar kaldırılıyor, yerini masalar alıyor. Mehtap da varsa değmeyin keyfime.". Her bir paragraftaki cümleler ilk cümle, ilk 2 cümle, ilk 3 cümle, ..., ilk n cümle olacak şekilde gruplara ayrılmaktadır. Buna göre ilk paragrafın örnek kümesi aşağıdaki gibidir. 54 İlk paragrafın 1. test içeriği, ilgili paragrafın ilk cümlesinden oluşmaktadır. "Bu Bodrum yazılarımın ilki değil, sanırım sonuncusu da olmayacak." şeklindedir. İlk paragrafın 2. test içeriği, ilgili paragrafın ilk iki cümlesinden oluşmaktadır. "Bu Bodrum yazılarımın ilki değil, sanırım sonuncusu da olmayacak. Sadece eğlence değil, deniz, güneş ve huzur isteyenler de Bodrum’da harika bir tatil yapabilir düşüncesindeyim." şeklindedir. İlk paragrafın 3. test içeriği, ilgili paragrafın ilk üç cümlesinden oluşmaktadır. "Bu Bodrum yazılarımın ilki değil, sanırım sonuncusu da olmayacak. Sadece eğlence değil, deniz, güneş ve huzur isteyenler de Bodrum’da harika bir tatil yapabilir düşüncesindeyim. Tabii sezonda Bodrum demek, yüksek fiyatlı uçak bileti, istediğin tarihlerde otellerde yer bulma sıkıntısı ve özellikle Cumartesi ve Pazar günleri plaj ve iskelelerde şezlong kalmaması sorunu olarak seni az da olsa mutsuz edebilir." şeklindedir. İlk paragrafın 4. test içeriği, ilgili paragrafın ilk dört cümlesinden yani paragrafın tümünden oluşmaktadır. "Bu Bodrum yazılarımın ilki değil, sanırım sonuncusu da olmayacak. Sadece eğlence değil, deniz, güneş ve huzur isteyenler de Bodrum’da harika bir tatil yapabilir düşüncesindeyim. Tabii sezonda Bodrum demek, yüksek fiyatlı uçak bileti, istediğin tarihlerde otellerde yer bulma sıkıntısı ve özellikle Cumartesi ve Pazar günleri plaj ve iskelelerde şezlong kalmaması sorunu olarak seni az da olsa mutsuz edebilir. Ama tüm bunlarla baş edebilirim dersen Bodrum’da bu yaz yeni yerler keşfetmene, yeni tatlar denemene vesile olabilirim." şeklindedir. Yukarıda belirtilen kurala göre ikinci paragrafın örnek test içerikleri aşağıdaki şekilde oluşmaktadır. İkinci paragrafın 1. test içeriği, ilgili paragrafın ilk cümlesinden oluşmaktadır. "Ben Bodrum’da en çok Gölköy’ü seviyorum." şeklindedir. 55 İkinci paragrafın 2. test içeriği, ilgili paragrafın ilk iki cümlesinden oluşmaktadır. "Ben Bodrum’da en çok Gölköy’ü seviyorum. Sıra sıra dizilmiş 15-20 odalı küçük otellerin (Beluga, Maritim, Velena, Sultan…) hepsinin önünde kendi iskeleleri var." şeklindedir. İkinci paragrafın 3. test içeriği, ilgili paragrafın ilk üç cümlesinden oluşmaktadır. "Ben Bodrum’da en çok Gölköy’ü seviyorum. Sıra sıra dizilmiş 15-20 odalı küçük otellerin (Beluga, Maritim, Velena, Sultan…) hepsinin önünde kendi iskeleleri var. Deniz şahane." şeklindedir. İkinci paragrafın 4. test içeriği, ilgili paragrafın ilk dört cümlesinden oluşmaktadır. "Ben Bodrum’da en çok Gölköy’ü seviyorum. Sıra sıra dizilmiş 15-20 odalı küçük otellerin (Beluga, Maritim, Velena, Sultan…) hepsinin önünde kendi iskeleleri var. Deniz şahane. İskeleler akşam restorana dönüşüyor, şezlonglar kaldırılıyor, yerini masalar alıyor." şeklindedir. İkinci paragrafın 5. test içeriği, ilgili paragrafın ilk beş cümlesinden yani paragrafın tümünden oluşmaktadır. "Ben Bodrum’da en çok Gölköy’ü seviyorum. Sıra sıra dizilmiş 15-20 odalı küçük otellerin (Beluga, Maritim, Velena, Sultan…) hepsinin önünde kendi iskeleleri var. Deniz şahane. İskeleler akşam restorana dönüşüyor, şezlonglar kaldırılıyor, yerini masalar alıyor. Mehtap da varsa değmeyin keyfime." şeklindedir. Her bir kategori için rastgele olarak seçilen blog içeriklerinden 250'şer adet cümle oluşturularak kategoriler ile ilişkilendirilmiştir. Oluşturulan bu test verileri oluşturulan arayüzde bulunan test içerik sekmesinden test edilerek çıkan sınıflandırma sonuçları puanlandırılmıştır. Bütün kategoriler için bu test işlemi tek tek yapılarak sonuçları analiz edilmiştir. Sağlık kategorisine göre yapılan cümle bazlı test işlemi sonuçları Çizelge 4.13'de gösterilmektedir. 56 Çizelge 4.13. Sağlık kategorisi için yapılan cümle bazlı test sonuçları Cümle/Puan 1 puan 2 puan 3 puan 4 puan 5 puan 1 cümle 0 0 5 22 135 2 cümle 0 0 0 4 37 3 cümle 0 0 0 2 19 4 cümle 0 0 0 1 13 5 cümle 0 0 0 1 7 6 cümle 0 0 0 0 3 7 cümle 0 0 0 0 1 >7 cümle 0 0 0 0 0 Toplam 0 0 5 30 215 Sağlık kategorisideki sonuçlar analiz edildiğinde, test içeriğinin cümle sayısının değişkenliğinin sonuçlara çok yüksek düzeyde bir etkisinin olmadığı görülmüştür. Sağlık kategorisinde algoritmanın yüksek bir yüzde ile doğru bir şekilde çalıştığı anlaşılmaktadır. Ekonomi kategorisine göre yapılan cümle bazlı test işlemi sonuçları Çizelge 4.14'de gösterilmektedir. Çizelge 4.14. Ekonomi kategorisi için yapılan cümle bazlı test sonuçları Cümle/Puan 1 puan 2 puan 3 puan 4 puan 5 puan 1 cümle 3 1 3 9 37 2 cümle 0 3 1 1 38 3 cümle 2 1 0 3 29 4 cümle 3 0 0 1 24 5 cümle 1 0 0 2 21 6 cümle 1 0 0 2 16 7 cümle 1 0 0 1 12 >7 cümle 0 0 0 1 33 Toplam 11 5 4 20 210 57 Ekonomi kategorisideki sonuçlar analiz edildiğinde, cümle sayısının sağlık kategorisine göre ekonomi kategorisinin daha çok etkilediği gözlemlenmiştir. Bu duruma özelikle 1 ve 4 cümlelik içeriklerde rastlanmıştır. Seyahat kategorisine göre yapılan cümle bazlı test işlemi sonuçları Çizelge 4.15'de gösterilmektedir. Çizelge 4.15. Seyahat kategorisi için yapılan cümle bazlı test sonuçları Cümle/Puan 1 puan 2 puan 3 puan 4 puan 5 puan 1 cümle 8 1 5 11 53 2 cümle 9 0 2 5 40 3 cümle 5 0 0 6 30 4 cümle 3 0 0 3 23 5 cümle 4 0 0 2 14 6 cümle 1 0 0 1 8 7 cümle 1 0 0 1 6 >7 cümle 0 0 0 0 8 Toplam 31 0 7 29 182 Seyahat kategorisinde özellikle kısa cümlelerde 1 puan sayısının yüksek olduğu görülmektedir. Bu durum seyahat kategorisi ile ilgili bir içerikde diğer kategorilere ait olan ayırt edici kelime ve kelime gruplarının fazla olmasından kaynaklanmaktadır. Eğitim kategorisine göre yapılan cümle bazlı test işlemi sonuçları Çizelge 4.16'da gösterilmektedir. 58 Çizelge 4.16. Eğitim kategorisi için yapılan cümle bazlı test sonuçları Cümle/Puan 1 puan 2 puan 3 puan 4 puan 5 puan 1 cümle 9 5 11 16 62 2 cümle 10 1 4 8 32 3 cümle 2 1 1 3 24 4 cümle 3 0 1 1 15 5 cümle 1 0 0 1 7 6 cümle 1 0 0 0 7 7 cümle 0 0 0 0 3 >7 cümle 0 0 0 0 21 Toplam 26 0 17 29 171 Eğitim kategorisi cümle sayısının artışına göre başarı oranının yükseldiği bir kategoridir. Özellikle 7 cümleden büyük içerikler için başarı oranı düşmektedir. 1 ve 2 cümlelik içeriklerde ayırt edici kelimelerin azlığı başarı oranını düşürmekte ve içeriğin diğer kategorilerde çıkmasına neden olmaktadır. Moda kategorisine göre yapılan cümle bazlı test işlemi sonuçları Çizelge 4.17'de gösterilmektedir. Çizelge 4.17. Moda kategorisi için yapılan cümle bazlı test sonuçları Cümle/Puan 1 puan 2 puan 3 puan 4 puan 5 puan 1 cümle 13 9 7 14 79 2 cümle 21 1 5 7 27 3 cümle 14 0 2 6 14 4 cümle 12 1 0 2 3 5 cümle 3 0 0 0 3 6 cümle 2 0 0 1 1 7 cümle 2 0 0 0 0 >7 cümle 1 0 0 0 0 Toplam 68 11 14 30 127 59 Moda kategorisi sınıflandırmanın en etkisiz olduğu kategoridir. Moda kategorisi diğer kategorilerle taşığı ortak kelime ve kelime gruplarından dolayı özellikle 1, 2, 3 ve 4 cümlelik içeriklerde oldukça düşük başarı elde etmiştir. Yemek kategorisine göre yapılan cümle bazlı test işlemi sonuçları Çizelge 4.18'de gösterilmektedir. Çizelge 4.18. Yemek kategorisi için yapılan cümle bazlı test sonuçları Cümle/Puan 1 puan 2 puan 3 puan 4 puan 5 puan 1 cümle 0 0 2 4 142 2 cümle 0 0 0 1 27 3 cümle 0 0 0 1 21 4 cümle 0 0 0 0 13 5 cümle 0 0 0 0 11 6 cümle 0 0 0 0 11 7 cümle 0 0 0 0 8 >7 cümle 0 0 0 0 9 Toplam 0 0 2 6 242 Yemek kategorisi sınıflandırmanın en yüksek başarı ile çalıştığı kategori olduğu görülmektedir. Cümle sayısından bağımsız olarak, yemek kategorisi için kullanılan test içerikleri başarılı bir şekilde sınıflandırılmıştır. Spor kategorisine göre yapılan cümle bazlı test işlemi sonuçları Çizelge 4.19'da gösterilmektedir. 60 Çizelge 4.19. Spor kategorisi için yapılan cümle bazlı test sonuçları Cümle/Puan 1 puan 2 puan 3 puan 4 puan 5 puan 1 cümle 0 0 2 1 59 2 cümle 0 0 0 2 41 3 cümle 0 0 0 1 37 4 cümle 0 0 0 0 32 5 cümle 0 0 0 1 25 6 cümle 0 0 0 1 20 7 cümle 0 0 0 0 14 >7 cümle 0 0 0 0 14 Toplam 0 0 2 6 242 Spor kategorisinde de yemek kategorisine benzer olarak sınıflandırma başarısı oldukça yüksektir. Bu nedenle spor ve yemek kategorilerindeki ayırt edici kelime ve kelime gruplarının sınıflandırma başarısını yükselttiği görülmektedir. Teknoloji kategorisine göre yapılan cümle bazlı test işlemi sonuçları Çizelge 4.20'de gösterilmektedir. Çizelge 4.20. Teknoloji kategorisi için yapılan cümle bazlı test sonuçları Cümle/Puan 1 puan 2 puan 3 puan 4 puan 5 puan 1 cümle 2 0 6 17 74 2 cümle 4 0 1 11 56 3 cümle 2 2 0 4 35 4 cümle 1 0 0 3 20 5 cümle 0 0 0 1 6 6 cümle 0 0 0 1 3 7 cümle 0 0 0 0 1 >7 cümle 0 0 0 0 0 Toplam 9 2 7 37 195 61 Teknoloji kategorisinde 1 cümleli içeriklerde puanlamaların 4 ile 5 arasında olduğu görülmektedir. Bu durumun nedeni teknoloji kategorisinde tek cümleli içeriklerin diğer kategorilerin ayırt edici kelime ve kelime gruplarını taşıdığı fakat gene de teknolojiyi de içerdiği sonucuna varılmaktadır. Bu durum cümle sayısındaki artışa bağlı olarak azalmakta ve sınıflandırma başarısı artmaktadır. 4.8. Uygulama Arayüzü Çalışmanın uygulama arayüzünün oluşturulması için Java ve JSP(Java Server Pages) kullanılmaktadır. JSP, Java programlama dili ile birlikte çalışan bir dinamik web sayfa oluşturma dilidir. HTML, XML gibi farklı döküman türleri üzerine yapılandırılmıştır. JSP'nin çalıştırılabilmesi için Apache Tomcat veya Jetty gibi sunucular ile birlikte çalıştırılması gerekmektedir. Tezin uygulama ve test sayfası http://www.karid.es websitesi üzerinden yayınlanmaktadır. Uygulama içerisinde 4 adet sayfa bulunmaktadır: 1. Anasayfa (Algoritma uygulama sayfası) 2. İstatistik 3. Test içerik listsi 4. Test içerik oluştur 4.8.1. Anasayfa Anasayfa, test içeriği kullanılarak algoritmanın çalıştırıldığı sayfadır. Sayfanın üst kısmında uygulama hakkında genel bilgiler verilmekte, kullanıcının test sürecinin nasıl yapacağını anlatan bir metin bulunmaktadır. Şekil 4.13'de anasayfanın genel bir görünümü verilmiştir. 62 Şekil 4.13. Algoritma uygulama anasayfası Anasayfa içerisinde farklı yöntemler vasıtası ile içerik oluşturularak algoritma test edilebilmektedir. Elle içerik girilmesi Rastgele içerik sekmesi Test içerik sekmesi Kayıtlı url sekmesi Harici url sekmesi Sayfada bulunan "İçerik" alanına kullanıcılar herhangi bir içerik girebilmektedirler. Bunun yanı sıra "Rastgele içerik" sekmesine tıklandığında görünmekte olan "Rastgele içerik getir" butonuna basılarak da veritabanına kaydedilmiş herhangi bir 63 test verisi rastgele bir şekilde seçilerek "İçerik" alanına yerleştirilir. Şekil 4.14'de "Rastgele İçerik" sekmesinin ekran görüntüsü verilmektedir. Şekil 4.14. Rastgele içerik getirme sekmesi Test içerik sekmesinden, her bir kategor için kaydedilen ve bu içeriklerin cümle cümle parçalanarak kaydedilmesi ile oluşturulan test içeriklerinin rastgele olarak getirilmesi sağlanmaktadır. Şekil 4.15'de "Test İçerik" sekmesinin ekran görüntüsü verilmektedir. Şekil 4.15. Test içerik getirme sekmesi "Kayıtlı url" sekmesinde ise daha önceden veritabanına kaydedilmiş herhangi bir websayfası linki listeden seçilerek "Gönder" butonun basılır ve ilgili linkin içeriği "İçerik" alanına yerleştirilir. Şekil 4.16'da "Kayıtlı Url" sekmesinin ekran görüntüsü verilmektedir. Şekil 4.16. Kayıtlı url'den içerik getirme sekmesi Bunların yanı sıra internet ortamından bulunan herhangi bir websayfası linki kopyalanıp "Harici Url" sekmesinde bulunan "Url" alanına yazılır ve "Gönder" 64 butonuna basılarak ilgili linkin içeriğinin getirilerek "İçerik" alanına yerleştirilmesi sağlanır. Şekil 4.17'de "Harici Url" sekmesinin ekran görüntüsü verilmektedir. Şekil 4.17. Harici url'den içerik getirme sekmesi Bahsedilen bu 4 yöntemin sonucunda içerik alanında bir test verisi bulunur ve algoritmayı test edilebilmesi için hazır hale getirilir. Şekil 4.18'de bahsedilen 4 yöntemden herhangi biri ile getirilmiş bir test verisinin "İçerik" alanında yerleşimi gösterilmektedir. Şekil 4.18. İçerik alanında bulunan test verisinin gösterimi "Algoritmayı Uygula" butonuna tıklandıktan sonra, "İçerik" alanında bulunan test verisi algoritma tarafından işlenir. İligili kategoriler en ilgiliden daha az ilgiliye doğru yüzdelik gösterimleri ile birlikte "Sonuçlar" kısmında listelenmektedir. Şekil 4.19'da "Sonuçlar" listesinin ekran görüntüsü verilmektedir. Şekil 4.19. Sonuçlar listesi 65 "Sonuçlar" listesinin altında, ilgili sonuçların değerlendirildiği "Sonuçları Değerlendir" paneli bulunmaktadır. Bu kısımda 1-5 arası radio button'lar bulunmaktadır. Test içeriğini değerlendiren kullanıcı kendisine en yakın gelen sonuçlara uygun olarak puan vermektedir. Bu kısım kullanılarak algoritmanın geçerliliği de test edilmiş olmaktadır. Şekil 4.20'de "Sonuçları Değerlendir" panelinin ekran görüntüsü verilmektedir. Şekil 4.20. Sonuçları değerlendir paneli "Kelime ve Kelime Gruplarının Kategorilere Göre Oranları" kısmında ise herbir kelime ve kelime grubunun kategorilerde bulunma sayıları ve oranları ayrıntılı olarak listelenmektedir. Şekil 4.21'de "Kelime ve Kelime Gruplarının Kategorilere Göre Oranları" panelinin ekran görüntüsü verilmektedir. Şekil 4.21. Kelime ve kelime gruplarının kategorilere göre oranları paneli Anasayfanın en altında ise girilen test verisi içerisinde bulunan fakat eğitim kümesi içerisinde kayıtlı olmayan kelime ve kelime gruplarının listesi " Eğitim Kümesi 66 İçerisinde Geçmeyen Kelime ve Kelime Grupları" başlığı altında verilmektedir. Şekil 4.22'de bu panelin ekran görüntüsü verilmektedir. Şekil 4.22. Eğitim kümesi içerisinde geçmeyen kelime ve kelime grupları 4.8.2. İstatistik sayfası Test sonucunda kullanıcıların sonucun kalitesine göre verdikleri puanların sayısal ve yüzdesel istatistiği istatistik sayfasında verilmektedir. Kullanıcı her bir sonuca en az 1, en fazla 5 arasında puan vermektedir. Bu puanlama tamamen testi yapanın kişisel bilgi ve birikimine kalmıştır. Fakat sonuçları doğruluğu için genel kabul edilmiş bilgilere bağlı kalması önemlidir. Eğer bir içerik “teknoloji” kategorisine ait iken “yemek” kategorisine ait olduğu kabul edilirse istatistiki sonuçlar da güvenilirliğini kaybeder. İstatistik sayfasının ekran görüntüsü Şekil 4.23'de verilmektedir. 67 Şekil 4.23. İstatistik sayfası 4.9.3. Test içerik listesi sayfası Test içerik sayfası içerisinde uygulama içerisinde daha önceden test edilerek kaydedilen test verilerinin listesi blunmaktadır. Bu sayfa ile hem kayıtlı test verileri görülebilmekte hem de bu test verilerine verilmiş olan puanlar görülebilmektedir. Şekil 4.24'de test içerik listeleme sayfasının ekran görüntüsü verilmektedir. 68 Şekil 4.24. Test içerik listeleme sayfası 4.9.4. Test içerik oluşturma sayfası Her bir kategori için oluşturulan test içeriklerinin kaydedilmesi için kullanılan sayfadır. Url, içerik, kategori form elemanları bulunmaktadır. Şekil 4.25'de test içerik oluşturma sayfasının ekran görüntüsü verilmektedir. 69 Şekil 4.25. Test içerik oluşturma sayfası Kaydedilmek istenilen blog adresi "url" form alanına yazılır. İstenirse "getir" butonuna basılarak web adresinin içeriği otomatik olarak çekilmektedir. Otomatik olarak çekilen blog yazısı "içerik" alanına yerleştirilir. Kullanıcı isterse kopyala/yapıştır yöntemi ile de blog içeriğini "içerik" alanına yerleştirebilmektedir. Blog içeriğinin ilgili olduğu kategori seçildikten sonra "Ekle" butonuna basılarak bütün veriler, veritabanında bulunan test_content tablosuna kaydedilmektedir. 70 5. SONUÇ VE ÖNERİLER Bu çalışma ile Türkçe blog içeriklerinin veri madenciliği algoritmalarından Naive Bayes ile başarılı bir şekilde sınıflandırılması işlemi yapılmıştır. Naive Bayes algoritmasının, Türkçe içerikli bloglarda sınıflandırma yapabileceği kanıtlanmıştır ve hedeflenen amaca ulaşılmıştır. Hazırlanan eğitim verisinin genişliği ile sunulan kategorilerin sayısı, algoritmanın test içeriklerini nasıl sınıflandıracağı konusunda önem göstermektedir. Bu nedenle oluşturulacak eğitim kümesinin ve belirlenecek kategorilerin belirlenen amaç doğrultusunda, hazırlanacak programın kapsamına göre dikkatlice seçilmesi gerekmektedir. Web teknolojileri ve bilişim alanlarında faaliyet gösteren, blog içerikleri, web sitesi içerikleri gibi metine dayalı içeriklerin sınıflandırılması konusunda yapılacak çalışmalar için temel teşkil edecek bir uygulama yapılmıştır. Sınıflandırma algoritması ve eğitim kümesinin hazırlanışı benzer çalışmalar için örnek oluşturmaktadır. Moda kategorisinde olduğu gibi, diğer kategoriler ile ortak bir kelime ve kelime grubu kümesine sahip kategorilerde başarı oranı yüksek değildir. Bu gibi bir durumda sınıflandırılması istenilen içerik ortak kelime ve kelime grubunun ağırlığının ait olduğu kategoriye ve kategorinin eğitim kümesi içerisindeki ağırlığına bağlı olarak istenmeyen şekilde sınıflandırılabilmektedir. Bundan sonraki yapılacak benzer çalışmalarda bu durum göz önünde bulundurularak farklı yaklaşımların denenmesinde fayda vardır. Ayırt edici ve ortak kelimelerin farklı yaklaşımlarla analiz edilmesi tavsiye edilmektedir. Kullanılan test içeriklerinin farklı cümle sayılarına göre test işlemi uygulandığında sınıflandırma başarısının kategorilere göre farklılık gösterdiği görülmüştür. Buna göre moda kategorisi en çok farklılığın görüldüğü kategoridir. Moda kategorisinde test içeriğinde geçen cümle sayısı ne kadar fazla ise algoritmanın da doğruluk oranı o 71 kadar artmaktadır. Cümle sayısının azlığı ve farklı kategorilere ait kelime ve kelime gruplarının bulunması moda kategorisinin başarısını düşürmektedir. Bu durum en büyük başarı yüzdesinin gözlemlendiği yemek ve spor kategorilerinde tam tersidir. Bu kategorilere ait olan eğitim kümesi içerisindeki kelime ve kelime gruplarının dağılımı diğer kategorilerde bulunma oranlarından daha yüksektir. Bu nedenle de bir test içeriğinin sınıflandırılması işleminde, test içeriğinin yemek ve spor kategorisine ait olması oranı diğer kategorilere göre daha yüksektir. Bu çalışmada başta belirlenen hedefe ulaşılabilmiş fakat bazı öngörülemeyen durumlar nedeni ile algoritmanın bazı kategoriler için daha farklı yaklaşımlar gösterilmesi gerektiği sonucuna varılmıştır. Belirlenen kategorilere göre eğitim kümesi hazırlanırken seçilecek eğitim kümesi içeriklerinin kategorilere uygun olmasına dikkat edilmelidir. Diğer bir önemli nokta ise kelime köklerinin bulunmasında dikkat edilmesi gereken yaklaşımdır. Türkçe doğal dil işleme alanında yapılan çalışmaların yetersizliğinden dolayı alternatif çözüm yollarına yönelinmesi ve daha kaliteli sonuçlar yaratılması gerekmektedir. Çalışmada Naive Bayes algoritması kullanılmasına rağmen belirtilen problemin çözümü için alternatif veri madenciliği algoritmaları da kullanılabilmektedir. En yakın K-komşu algoritması, karar ağaçları, yapay sinir ağları ilgili algoritmalara örnek olarak gösterilebilmektedir. 72 KAYNAKLAR 1. Chau, M., Lam, P., Shiu B., Xu, J., Cao, J., “A Blog Mining Framework”, IT Professional, 11 (1): 36-41 (2009). 2. Huang, T., Cheng, S., and Huang, Y., “A blog article recommendation generating mechanism using an SBACPSO algorithm”, Expert Systems with Applications, 36: 10388–10396 (2009). 3. Li, Y., Chen, C., “A synthetical approach for blog recommendation: Combining trust, social relation, and semantic analysis”, Expert Systems with Applications, 36: 6536–6547 (2009). 4. Dalal, M.K., "Automatic text classification of sports blog data", Computing, Communications and Applications Conference (ComComAp), 219-222 (2012) 5. Rastogi, R., Shim, K., “Mining Optimized Association Rules with Categorical and Numric Attributes”, IEEE Transactions On Knowledge And Data Engineering, 14(1): 29-50(2002). 6. Krishna, P. R., De, K. S., “Naive-Bayes Classification using Fuzzy Approach”, Intelligent Sensing and Information Processing, 61-64 (2005). 7. Vahaplar , A., İnceoğlu, M.M.: Veri Madencili ği ve Elektronik Ticaret, VII. Türkiye’de İnternet Konferans ı, 1–3 Kasım 2001. 8. Han, J. And Kamber, M. 2001, Data Mining Concepts and Techniques, Academic Pres, New York. 9. Pedryez, W., and Sosnowski, Z. A., “Designing Decision Trees with the Use of Fuzzy Granulation”, IEEE Transactions On Systems, Man, And Cybernetics, 30(2): 151 – 159 (2000). 10. Setiono, R., Liu, H., “A Connectionist Approach to Generating Oblique Decision Trees”, IEEE Transactions On Systems, Man, And Cybernetics, 29(3): 440-444 (1999). 11. Shah, S., and Sastry, P. S., “New Algorithms for Learning and Pruning Oblique Decision Trees”, IEEE Transactions On Systems, Man, And Cybernetics, 29(4): 494-505(1999). 12. Tosun, T., “Veri Madenciliği Teknikleriyle Kredi Karlarında Müşteri Kaybetme Analizi”, İstanbul Teknik Üniversitesi Fen Bilimleri Enstitüsü, Yüksek Lisans Tezi, İstanbul, 2006. 73 13. Küçüksille, E., “Veri Madenciliği Süreci Kullanılarak Portföy Performansının Değerlendirilmesi ve İMKB Hisse Senetleri Piyasasında Bir Uygulama”, Süleyman Demirel Üniversitesi Sosyal Bilimler Enstitüsü İşletme Anabilim Dalı, Doktora Tezi, Isparta, 2009. 14. Mou, S., Gao, H., Qiang, W., and Chen, K., “New Delay-Dependent Exponential Stability for Neural Networks With Time Delay”, IEEE Transactions On Systems, Man, And Cybernetics, 38(2): 571-576 (2008). 15. Albayrak, M., Allahverdi, N., “Development a new mutation operator to solve the Traveling Salesman Problem by aid of Genetic Algorithms”, Expert Systems with Applications, 38: 1313-1320 (2011). 16. Kalıkov, A., “Veri Madenciliği ve Bir E-Ticaret Uygulaması”, Gazi Ünversitesi Fen Bilimleri Enstitüsü Elektronik ve Bilgisayar Eğitimi, Ankara, 2006. 17. Choi, I., Kim, S., Kim, H., “A genetic algorithm with a mixedregion search for the asymmetric traveling salesman problem”, Computers & Operations Research, 30: 773-786 (2003). 18. Xie, J., and Jiang, S., “A simple and fast algorithm for global K-means c lustering”, 2010 Second International Workshop on Education Technology and Computer Science, 36-40 (2010). 19. Chen, Y-L., Chen, J-M., Tung, C-W., “A Data Mining Approach For Retail Knowledge Discovery With Consideration Of The Effect Of Shelf-Space Adjacency On Sales”, Decisions Support Systems, 3(42): 1503-1520 (2006). 20. Ordonez, C., “Association Rule Discove ry With the Train and Test Approach for Heart Disease Prediction”, IEEE Transactions On Information Technology In Biomedicine, 10(2): 334-343(2006). 21. Rushing, J. A., Ranganath, H.S., Hinke, T. H., Graves, S. J., “Using Association Rules as Texture Features”, IEEE Transactions On Pattern Analysis And Machine Intelligence, 23(8): 845-858 (2001). 22. Akbulut, S., “Veri Madenciliği Teknikleri İle Bir Kozmetik Markanın Ayrılan Müşteri Analizi Ve Müşteri Segmentasyonu”, Yüksek Lisans Tezi, Gazi Üniversitesi Fen Bilimleri Enstitüsü, 2006. 23. Bidgoli, A. M., Boraghi, M., “A Language Independent Text Segmentation Technique Based on Naive Bayes Classifier”, International Conference on Signal and Image Processing, 11-16 (2010). 74 24. Lee, C-H., Gutierrez, F., Dou, D., “Calculating Feature Weights in Naive Bayes with Kullback-Leibler Measure”, 11th IEEE International Conference on Data Mining, 1146-1151 (2011). 25. Altıntaş, T., “Veri Madenciliği Metotlarından Olan Kümeleme Algoritmalarını Uygulamalı Etkinlik Analizi”, Sakarya Üniversitesi Fen Bilimleri Enstitüsü, Sakarya, 2006. 26. Akın, A. A., Akın, M. D., “Zemberek” http://code.google.com/p/zemberek/ 27. Roiger, R., Geatz, M.W., “Data Mining: A Tutorial-Based Primer”, Addison Wesley, 2003. 75 ÖZGEÇMİŞ Kişisel Bilgiler Soyadı, adı : DEĞERLİ, Onur Uyruğu : T.C. Doğum tarihi ve yeri : 21.07.1985 Merzifon, Amasya Medeni hali : Bekar Telefon : 0 (506) 818 98 16 e-mail : [email protected] Eğitim DereceEğitim Birimi Mezuniyet tarihi Lisans Gazi Üniversitesi/ Bilgisayar Sistemleri Öğrt. 2008 Lise 2003 Merzifon Anadolu Ticaret Meslek Lisesi İş Deneyimi Yıl Yer Görev 2008 Yön Group Web Geliştiricisi 2008 BerilTech Web Geliştiricisi 2009 Derle Danışmanlık Bilişim Yazılım Uzmanı 2011 Nokta Domains Web Geliştiricisi 2011 BerilTech Web Geliştiricisi Yabancı Dil İngilizce Hobiler İnternet teknolojileri, kitap okumak, dart sporu.