Tag cloud (weighted list) ya da Türkçe olarak sözcük bulutu/ağırlıklı liste, daha çok blog sitelerinde birbiriyle ilgili içeriklere çabuk ulaşımı sağlayan ve 2005 yılından bu yana internette günlük tutanlar tarafından yaygın bir şekilde kullanılan görsel bir yardımcı. Genel olarak, sitenin içeriklerinde geçen kelimelerin / kelime gruplarının ya da içeriği kategorilendirirken oluşturulan ilişkili kelimelerin tüm içeriklerde kaç defa geçtiği hesaplanıp, tüm site bazındaki ağırlıklı ortalamalar alınıp görsel olarak kullanıcılara gösterilmesini amaçlanıyor. Tag cloud oluştururken kullanılan değişik yaklaşımlara güzel bir örnek de (birbiriyle ilişkili kelimelere yönelik hesaplamalar) University of New Brunswick` den Owen Kaser ve Université du Québec à Montréal` den Daniel Lemire tarafından hazırlanan
TagCloud Drawing: Algorithms for Cloud Visualization isimli çalışmada görülebilir.
mirmirik.net sitesinin bir önceki sürümünü yaparken basit bir tag cloud eklemek ama bunu da ağır matematiksel algoritmalara dayandırmadan hızlı bir şekilde yapmak istedim. Bunu oluşturmak için kullandığım kodları ve veritabanı yapısını, bu yazının ilerki satırlarında paylaşıyor olacağım.
Veritabanı:
İlk önce eski veritabanı yapısına şu şekilde ufak bir eklemede bulundum:
TBL_CONTENT içerikleri, TBL_SUBJECTS içerik ile ilgili kelimeleri ve son olarak da TBL_SUBJECT_CONTENT_MAP de her bir içeriğe ait kelime bağlantılarını tutan tablolar. Siteye herhangi bir içerik eklerken, ilgili yönetim ekranında TBL_SUBJECTS tablosundaki ilgili kelimeleri de seçiyor, ya da eğer yeni kelimeler ekleyeceksem de onları bir textbox` a virgül ile ayrılmış olarak giriyorum. Yeni kelimeler varsa, TBL_SUBJECTS tablosuna bu kayıtları daha sonra da kullanabilmek için giriyorum. Buradaki prosedürler başka bir yazının konusu olduğu için şu anda sitede görülen tag cloud` u nasıl oluşturduğuma geçeyim.
Şu T-SQL ile her kelimenin kaç yazıda geçtiği bilgisini alıyorum ve harf sırasına göre diziyorum. Ayrıca iki veya daha az yazıda geçen kelimeleri almıyorum.
SELECT CT.SUBJECT_ID, C.SHORTDESC, COUNT(CT.CONTENT_ID) AS FNSIZE
FROM TBL_SUBJECT_CONTENT_MAP CT, TBL_SUBJECTS C
WHERE CT.SUBJECT_ID = C.SUBJECT_ID
GROUP BY CT.SUBJECT_ID, C.SHORTDESC
HAVING (COUNT(CT.CONTENT_ID) > 2)
ORDER BY C.SHORTDESC
Bu sorgu şu şekilde bir sonuç tablosu döndürmekte:
Elimizdeki bu veriyle yapmak istediğimiz tag cloud` u oluşturmak artık sorun olmayacak. Tek yapmamız gereken, tag cloud içindeki linkleri oluştururken aşağıdakine benzer bir c# kodu ile her kelime için fontların büyüklüğünü belirleyen bir
style oluşturmak ve bunu da ilgili linke eklemek.
...
double _fnSize = (double.Parse(_dr["FNSIZE"].ToString()) / 10.0) + 0.5;
_lnk.HrefStyle = "font-size:" + _fnSize.ToString().Replace(`,`, `.`) + "em";
...
Bu sayede elinizdeki her kelimenin büyüklüğü toplamda kaç içerikte yer aldığına, doğru orantı ile bağlı olarak değişmiş oluyor. Daha fazla yazıda geçen kelimenin büyüklüğü daha fazla oluyor.
Üşenmezsem bir sonraki yazıda ajaxPro kullanımı ile ilgili örnek vermeye ve mirmirik.net sitesindeki yorum kısmının nasıl yazıldığını anlatmaya çalışacağım.
Kelimeler: Açık Kaynak,
AJAX,
ASP,
ASP.NET,
Bedava, free,
C#,
CSS,
GNU,
Open Source,
W3C,
Web sitesi,
XHTML
« CSS ve XHTML ile Site Navigasyonu