Zoque.Forum
»
ASP ile Etiket Bulutu Tasarımı
|
| Makaleler Tasarım, teknoloji, web, kültür ve sanat ana başlıkları olmak üzere forumda yer verilen bölümler ilgili her türlü makaleye bu bölümde yer verebilirsiniz. Sitenizde yayınladığınız ve burada bizlerle yeniden paylaşmak isteyeceğiniz makaleleri de gönderebilirsiniz. |
![]() |
|
|
LinkBack | Article Tools |
|
|
|
|
Üyelik Tarihi: 04.06.2006
Yer: Ankara
Mesaj: 4
|
ASP ile Etiket Bulutu Tasarımı
Son zamanlarda sosyal paylaşım sitelerinin çoğalması ile bu içeriklerin sınıflandırılması, kategorilendirilmesi ve kullanıcıya sunulması büyük önem kazandı. Bu siteler web 2.0’ın çıkmasıyla kullanıcılara değişik seçenekler sunmaya başladı. Bu sitelerin içerisindeki içeriklerin belirli anahtar kelimelerle –etiketlerle- tanımlanarak, kullanıcıların bu kelimelere göre aradıklarını bulması daha kolay bir hale geldi.
Etiket bulutu, site içeriğindeki bu anahtar kelimelerin sayısına göre daha belirgin veya daha büyük yazıtipi ile gösterilmektedir. Kullanıcı da bu büyük yazıtipi ile yazılmış bu etiketlere daha çok yoğunlaşmaktadır. site sahiplerinin Etiket Bulutunu kullanıcılara sunmasındaki en büyük sebep, kullanıcıların kendi yazılarını, fotoğraflarını dilediklerince kategorize etmeleri ve diğer kullanıcıların bu kategorileri kullanarak diğer kullanıcılara ulaşmalarıdır. Örnek: Örneğin Sivas Kangal Köpeği hakkında bir yazı yazıyorsunuz. Bu yazınıza kesinlikle, "Sivas", "Kangal" ve "Sivas Kangalı" etiketlerini yapıştırmalısınız ki yazınızın ne hakkında olduğunu başka kullanıcılar rahatlıkla anlayabilsin. Çeşitleri: İki çeşit Etiket Bulutu bulunmaktadır. Aralarındaki en büyük fark görünümlerinden ziyade, anlamlarıdır.
http://upload.wikimedia.org/wikipedi...iketBulutu.JPG ASP ile Etiket Bulutu Tasarımı Veritabanı: Aşağıdaki gibi bir tablo oluşturuyoruz. Kod: Bu kaydedeceğimiz dosyayı istediğiniz yere include ederek orada Etiket Bulutumuzu gösterebiliriz. <!--#include file="tagcloud.ASP"--> Tagcloud.ASP Kod:
<% ' ################################# ' # KODLAMA: Cem Gündüzoğlu # ' # Tüm Hakları Saklıdır. 2007 # ' # cmg.web@gmail.com # ' ################################# 'Bağlantımızı açıyoruz Set Conn = server.CreateObject("ADODB.Connection") Conn.Open="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & db_user & ";User Id=admin;Password=;" 'Recordseti tanımlıyoruz Set tagRs = server.CreateObject("ADODB.Recordset") 'ETIKETLER tablosu içerisinden aynı isimde olan Etiket leri tek bir kayıt olarak listeletiyoruz(DISTINCT) SQL = "SELECT DISTINCT Etiket FROM ETIKETLER ORDER BY Etiket ASC" tagRs.Open SQL, Conn, 3, 3 'Toplam Etiket sayısını bulmak için ayrı bir Recordset tanımlıyoruz Set toplamtagRs = server.CreateObject("ADODB.Recordset") SQL = "SELECT Etiket FROM ETIKETLER" toplamtagRs.Open SQL, Conn, 3, 3 toplamhit=toplamtagRs.Recordcount do while not tagRs.EOF if tagRs.EOF then exit do Set tag2Rs = server.CreateObject("ADODB.Recordset") 'ETIKETLER tablosu içerisideki her bir etiketin kaç tane olduğunu saydırıyoruz ve TagHit değişkeninde elde ediyoruz SQL = "SELECT Count(Etiket) as TagHit FROM ETIKETLER WHERE Etiket='" & tagRs("Etiket") & "'" tag2Rs.Open SQL, Conn, 3, 3 hit=tag2Rs("TagHit") 'hit değerine göre font büyüklüğünü vs. ayarlıyoruz fsize=cint(100*hit/toplamhit)+3 %> <nobr><a href="fotograf/arama.ASP?etiket=<%=server.URLEncode(tagRs("Etiket"))%>"><span title="(<%=hit & "/" & toplamhit & " - " & fsize%>)" style="font-family:Tahoma; font-size:<%=fsize%>"><%=tagRs("Etiket")%></span></a></nobr> <% tagRs.MoveNext loop %> Wikipedia, http://tr.wikipedia.org/wiki/Etiket_Bulutu Resim, http://tr.wikipedia.org/wiki/Resim:EtiketBulutu.JPG Mesaj cmg.web tarafından 02.09.2007 (15:22) yeniden düzenlendi.. |
|
|
|
|
|
|
|
Üyelik Tarihi: 23.08.2007
Yer: İstanbul
Yaş: 20
Mesaj: 49
|
Re: ASP ile Etiket Bulutu Tasarımı
Etiket bulutu tasarımıyla ilgili güzel bir yazı. Teşekkürler...
Bu konunun altına etiket bulutu nasıl yapılırı da yazarsak çok daha güzel olur bence. Başka bir konuya yazmıştım ama makaleler arasında bulunursa daha çok kişi faydalanabilir. Aspogren.net sitesinde bu konu açıklanmış ama site bayadır kapalı. ![]() Makele burda. (Baya zor buldum bu adresi...) Örnek çalışma da burda. Benimde ASP blogum var ama etiket sistemini ekleyemedim. Zamanım olmadı ve çok ta karışık geldi... Ama bir ara yapmayı düşünüyorum. ![]() Arkadaşlar Google cache silinirse diye, makalenin orjinalini de buraya yazdım. Kolay gelsin... ASP ile etiket sistemi yapımı (Kaynak:aspogren.net) Öncelikle sabırla yazıyı takip etmenizi istiyorum. Çok uzun bir yazı olacağa benziyor. Konu ağır ve bir o kadar da önemli Bugünlerde artık sitelerde kategorilerin kalktığını, yerini etiket sisteminin aldığını görüyoruz. Peki bu etiket sistemi nedir? Mantığı nedir ve neden kullanılır? gibi sorular çok sorulmuştur. Cevaplayalım. Etiket sistemi kategori sisteminin önüne geçen bir özgürlüktür. Sitemizde yer alan kategoriyi uzatma şansımız yoktur. Ama etiketlerde dilediğimiz cümleleri verebiliriz. Önemi ise, bir çok yazıyı birbirine ilişkilendirerek çağırmasıdır. Ve arama motorları bunları sanki anahtar kelime gibi görebiliyor. Peki etiket sistemini nasıl hazırlayacağız. Öncelikle işin mantığını, temelini anlamak gerekir. web 2.0'ın inanılmaz gelişmeleri vardır. Bunların başında Etiket sistemi, Starrating vb.. Ama şu anda bizi etiket vurgusu ilgilendirmektedir. Olay çok basit. İyi analiz edilmeli, veritabanı iyi oluşturulmalıdır. Bu yazımızda algoritma geliştirdiğimiz için herhangi bir oluşum için kod temin etmeyeceğim. Çünkü burada bir döngü, split ve SQL komutları gerekmektedir. İşin mantığını anlayacağım ve kısa kısa kodlar ile bitireceğim yazımı. Etiket sistemi için veritabanı tasarımı Öncelikle kategori olayını gözünüzün önüne getirin. 2 tane tablomuz olurdu, birincisi kategorileri tutar, diğerleri ise sitemizin içeriği olan yazıları. Etiket sisteminde de değişen birşey yoktur. Hemen veritabanı modelimizi verelim. 2 adet tablomuz olacak. Öncelikle içerik depomuzu yaratalım; Tablo Adı : icerik Alanlar : id (otomatik sayı), baslik (metin / 50), aciklama(not) Ve etiket depomuzuda yaratalım; Tablo Adı : etiket Alanlar : id (otomatik sayı), yazi (sayi), etiket (metin / 100) Peki veritabanımızı oluşturduk, ya gerisi? Şimdi yapılacak bir form gerekli (kod vermeyeceğim dedim ama olmayacak gibi). Hemen bir form yaratıyoruz. form alanında 3 eleman gerekli. 1. Başlık 2. Açıklama 3. Etiketler form.ASP için aşağıdaki kodları kullanınız; Kod:
<form action="isle.ASP" method="post"> <p>Başlık : <br /><input type="text" name="baslik" /></p> <p>Açıklama : <br /><textarea name="aciklama"></textarea></p> <p>Etiketler : <br /><input type="text" name="etiket" /></p> <p><strong>Not : </strong>Etiketleri virgül ile ayırınız.</p> <input type="submit" value="Kaydet" /> </form> Örnek : ASP,MySQL,SQL,CSS,XHML,Active server Pages vb... Buraya kadar olan işlemler basitti. Şimdi zorlu aşamaya geldik. Bunları işlemek ve veritabanına depolamak. Aslında şuanda ASP hakkında bir çok konuyu işlemiş olacağız. 1. Veritabanına kayıt, 2. Veritabanında sorgulama 3. İçerik listeleme 4. Etiket sistemi vb... isle.ASP için aşağıdaki kodları kullanınız; Kod:
<%
baslik = trim(request.form("baslik"))
aciklama = trim(request.form("aciklama"))
etiket = trim(request.form("etiket"))
If Len(baslik) < 5 or Len(aciklama) < 10 then
response.write "Başlık ve açıklama alanlarını doldurun."
Else
Set ODBC = server.CreateObject("ADODB.Connection")
ODBC.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & server.MapPath("mdb.mdb")
Set kayit = ODBC.Execute("Insert into icerik (baslik,aciklama) values ('"&baslik&"','"&aciklama&"')")
set kayit = nothing
Set kontrol = ODBC.Execute("Select id from icerik where baslik = '"&baslik&"'")
If not kontrol.eof then
If isnull(etiket) = false then
etiketler = split(etiket, ",")
For i = 0 to Ubound(etiketler)
Set etiketkayit = ODBC.Execute("Insert into etiket (yazi,etiket) values ('"&kontrol("id")&"','"&trim(etiketler(i))&"')")
Set etiketkayit = nothing
next
End If
End If
kontrol.close : set kontrol = nothing
response.write "Tüm bilgiler kaydedildi"
End If
%>
Öncelikle verimizi kaydettik, sonra bir sorgulama gerçekleştirdik, kayıt olan id'yi tespit etmek için. Şimdi diyeceksiniz ki aynı veri girilirse ne olacak. Temeli anlattığım için kodları uzatmak istemedim. Verinizi kaydetmeden önce bir sorgu açıp, başlık ile ilişki kurup aynı isimde var mı yok mu diye ilişkilendirmelisiniz. Gelecek konularımızda bu konu üzeirinde uzun uzun duracağız. Kodları büyütüp sizi yormak istemedim. Son aşama olarak, etiket değişkeninin boş olup olmadığını sınadık (isnull). Eğer boş değilse virgül (,) ile split uyguladık. Ve split uyguladığımızda şöyle bir değer dönecekti; Örneğin etiketler hanesine şu değerler verilsin; ASP, MySQL, CSS, XHTML Split ile süzüldüğünde dönecek olan değerleri değişken adımız olan etiketler ile örneklendiriyorum. etiketler(0) = ASP etiketler(1) = MySQL etiketler(2) = CSS etiketler(3) = XHTML Daha önce demiştik ya, programlamada ilk değer her zaman sıfırdır diye, bu düzden de for döngümüzü 0 (sıfır)'dan başlattık. Döngümüzde yer alan Ubound(etiketler) söz dizimi, (daha önce bu konuyuda işlemiştik) UBound bir dizide yer alan toplam veri değerini veriyordu. For döngümüzü 0'dan etiketler dizisinin aldığı son değere kadar dönmesini istedik. Ve her değerimizide veritabanımıza yazdırdık. Şimdi yukarıda etiketler değişkenin alabileceği 4 değeri vermiştim. Kodlarımız arasında yer alan trim(etiketler(i)) ifadesi ise şu anlamdadır. Döngü her döngüğünde i değişkenimiz farklı bir değer alacaktı. 0 - 1 - 2 ... gibi. yani her döngü dönüşünde etiketler değişkeninin o değerdeki karşılığını istedik. Örneğimize göre örneklendirmek gerekirse; trim(etiketler(2)) değeri CSS değerini verecektir. Uygulamamızı bitirmiş oluyoruz. Sizle birlikte bende deneyerek tamamladım. Örneğimide çalıştırdım. Ve sizlerin konuyu daha net anlayabilmesi için demo olarak download'a sunacağım. Ayrıca konuyu uzatmamak için gereken diğer yazılarımı örnek içerisinde tamamladım. Etiketleri yazılar ile nasıl ilişikilendireceğinizi (bilgial.ASP) ve seçilen etikete ait yazıları nasıl bulacağınızı (bilgial.ASP) örnek içinde kodladım. Kodları iyice incelerseniz konuya hakim olacaksınızdır. Elbette ilk denemelerinizde yanılabilirsiniz ama üzerine giderseniz bu konuyu mutlaka öğreneceksinizdir. Etiket sistemi hakkında hazırlamış olduğum örneği buradan indirebilirsiniz. Kolay gelsin Mesaj turuncuu tarafından 02.09.2007 (10:58) yeniden düzenlendi.. |
|
|
|
|
|
|
|
Re: ASP ile Etiket Bulutu Tasarımı
Etiket bulutu güzel bir olay, yalnız bu yazı ilk yayınlandığı zaman gözümden mi kaçmış yoksa ASP diye hiç bakmamış mıyım bilmiyorum ama orada verilen veritabanı yapısını hiç doğru bulmuyorum.
Etiketler ve etiket-fotograf-baglantilari şeklinde iki ayrı tablo olmaması, aynı etiketin defalarca veritabanına girilmesini engelleyeceği gibi bir etiketin kaç fotoğrafa bağlantığını da daha hızlı ve etkili bir şekilde bulmanızı sağlayacaktır. |
|
|
|
|
|
|
|
|
Üyelik Tarihi: 09.03.2008
Yer: Sakarya
Yaş: 22
Mesaj: 18
|
Re: ASP ile Etiket Bulutu Tasarımı
Şimdi arkadaşlar, herşey güzel de ben işin teorik kısmını tam anlamadım.Teoriden ziyade işin usulünü tam bilmiyorum. Yani bu tag olaylarında iki ayrı makalemde aynı etiket kullanılabilir mi yoksa kullnılamaz mı? (Usulen) Eğer kullanabilirsek tag arşiv gibi bir bölümde her etiketi (aynı etiket ama) teker teker mi çekmeliyiz yoksa bir tanesini çekip onun hit deperini fiğer db'deki aynı etiketin hit değerleri olarak mı ele alacağız? Biraz karıştı şöyle söyleyeyim.
Aynı etiketin farklı makalelerde tekrar tekrar db'e eklendiğini varsayarak soruyorum. Diyelimki etiket1 ve etiket1 adında 2 defa eklediğim bir kelime var(Bunlardan birisi A makalesi için eklenmiş diğeri B makalesinde eklenmiş.) Şimdi ben tag arşivinde Etiket1(20),Etiket1(15) şeklinde mi göstereceğim yoksa Etiket1(35) şeklinde mi? (Hit değerlerini başka şekilde kullanıcam tabiki, yukarıdaki gibi sayfaya basmıycam) Tabii yine burda bi sorun daha var. diyelim ki Etiket1'e tıklandı ve aradı. Bu şimdi tag.ASP?tag=etiket1'de 10 id numarsına sahip Etiketi'in mi hit sayısını 1 artıracak yoksa id numarsı 11 olan Etiketin hitini mi 1 artıracak. Son bir soru daha, diyelimki yukarıda olduğu gibi etiket1 adında bir kelimeyi aratırıyoruz. Yani tag.ASP'ye yolladım. Ben şimdi Db deki makalelerde yazılarda her neyse içinde etiket1 geçen yazılarımı arattırıp listeleyeceğim (bu durumda normal arama ile bir farkı olmuyor) yoksa makalelerde etiket olarak etiket1 verilmiş yazılarımı arattırıp listeleteceğim . Her ne kadar hoşuma gitmesede mecbur sisteme ayak uydurmam lazım. Ama yukarıdaki sorularımdan da anlaşılacağı üzere bu sistemi tam olarak bilmiyorum. Birisi bana tarif ederse kod kısmı sorun değil zaten. Şimdiden teşekkürler. |
|
|
|
|
|
|
|
Üyelik Tarihi: 13.09.2004
Yer: Denizli
Yaş: 27
Mesaj: 13
|
Re: ASP ile Etiket Bulutu Tasarımı
BYK'ya katılıyorum.
http://www.bildirgec.org/yazi/etiketleme-mimarileri adresindeki "Etiketleme mimarileri" konulu yazıda da kapsamlı olarak değerlendirilmiş. Makalede etiketleme veri tabanı performansı gibi ölçümlerede ulaşabileceğiniz köPage Rankingüler bulunmakta. |
|
|
|
|
|
|
|
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,275
|
Re: ASP ile Etiket Bulutu Tasarımı
Her ne kadar dedigin yapi tahmin edilecek ve olmasi gereken db yapisi ise de projeden projeye konu degisebilir. Mesela daha performansli bir yapi olusturmak icin bu sekilde bir hit kolonu tutulup triggerlar ile guncellenebilir, ya da belli periyodlarda tekrar olusturulabilir.
Her ne kadar bunun icin en iyi tasarim bu olsa da performans ve baska nedenlerden dolayi bu tasarim degisebilir, dolayisiyla bu konuda o kadar kati olmamak gerekir. Ilgini cekerse bu konu pragmatic programmer kitabinda detayli sekilde isleniyor, yani mukemmel tasarimdan vazgecip, gerekince sorunu en verimli sekilde cozecek istisnalar yapmak. Hatta bu veritabani ornegi aynen geciyor. Bu konuda bende zamaninda bir blog yazmistim ( http://ferruh.mavituna.com/tag-deste...-yapilari-oku/ ) , tag + trove kategoriden bahsediyor, nitekim bunun bir implemantasyonunu daha sonradan yaptim gayet de hos oldu ![]()
__________________
FERRUH.MAVİTUNA - İnanmıyorum, yeni site! |
|
|
|
|
|
|
|
Üyelik Tarihi: 13.09.2004
Yer: Denizli
Yaş: 27
Mesaj: 13
|
Re: ASP ile Etiket Bulutu Tasarımı
Teoride "Mükemmel" öngörülen şartlar altındaki en verimli sistem olarak kabul etsekte gerçekte daha iyi sonuç üretecek yan sistemler gerekebilmekte.
Kategori ve etiketleme konusunda örnek aldığım yapılardan biri DMOZ dizini. Biraz dikkatli bakıldığında @ ifadesi ile ana kategori dizini altında olan dalların etiketlenerek bir birine köPage Rankingülendiği fark edilebiliniyor. Yani en azından benim fikrim bu. Son zamanlarda ana dizin kullanmadan sadece etiket kullanarak dizin ağacı mimarisi üzerine kafa yormuştum. Mimari içindeki bir etiket/dizin tekrar etmeden depolanmakta. Burada karşıma çıkan sorun ise Dizin olarak tanımladığınız bir etiketin dolaylı bağlar ile yine kendisini etiketleme güzelliği ile ortaya çıkan paradoks olmakta. Düşündüğüm bu mimaride dizin ve etiketler bir tabloda bulunmakta; bir etiket == bir dizin. #etiketler eId:otomatik sayı eEtiketAdi:karakter(ler) mimari içindeki diğer tüm nesneler ana dizin içinde kendini yukarıdaki etiket tablosu ile tanımlamakta. örneğin bir nesne veri tabanında şu şekilde tutulacak; #nesne nId:otomatik sayı nNesneBilgisi: ... nNesneEtiketleri:IStringList:array([etiketler.eId], ...) nesne üzerindeki etiket tanımlarına bu şekilde sorgular ile ulaşmak istendiğinde biraz sıkıntılı olmakta. çünkü nNesneEtiketleri alanı IStringList biçiminde. array türdeki bir kalıpla tek alana depolanmakta. sorgular ile barışık bir mimari için nNesneEtiketleri bağlantıları ayrı bir tablo olarak tasarlanması gerekmekte #nesneBaglantilari ebId:otomatik sayı ebNesneId:sayı [nesne.nId] ebEtiketId:sayı [etiketler.eId] bu safhada da mimari içinde birden çok nesne veri tabanı ihtiyacı çıktığında nesneBaglantilari tablosunda Ferruh'un makalesinde bahsettiği "rezillik" çıkmakta. kitaplardan, menülerden, dizinlerden hattay hayatımızdan alışa geldiğimiz o hiyararşi bu durumda mimarinin içinde anlamını yitirmekte. bunun alışa geldiğimiz hayatımızda çıkardığı karmaşa bir yana dursun ilk başta bahsettiğim dolaylı bağlar ile oluşan paradoks bir yana. quantum teorileri (qbit) gibi mimari olarak alışa gelmediğimiz bir gerçeklik tanımı doğmakta yani; bir nesne bir anda her yerde olabilir. |
|
|
|
Zoque'a hoşgeldiniz!