指穷于为薪,火传也,不知其尽也。—《养生主》

Daily English:He who makes no mistakes makes nothing.

标签之我见

先说明一下:之前我对tag(标签)不感兴趣,所以对它的了解十分浮浅,也没有对它进行针对性地探讨和查找资料,所以,底下我自以为是的想法也许在各位看官眼里十分可笑。没关系,觉得可笑就笑出来,憋在肚子里会得内伤的,我只是将自己的想法和大家分享,当然,也希望得到大家的回应。

最近,在开始对个人小窝的整改的时候,顺手将之前虚有其表的tag(标签)功能的范围扩大,并按照一定算法(在最后我会将我的算法列出来)将热门tag(标签)按照对应规则显示在首页上,看着那几个大小不一的tag(标签)的时候,还是颇有一番成就感。看着看着,我发现我似乎对tag(标签)的理解更深了一层。

先说我之前对tag(标签)的理解:我认为它就是一个分类的作用,起到对文章内容的一个提取功能。而且由于它是由用户自定义的,我之前甚至还认为tag(标签)非常的麻烦,并不方便使用。嗯,貌似比较不正规……可这就是我之前对它的看法,所以,在这两天之前,我站上的tag(标签)实质上仍然是作为分类的替代品(现在内容仍然没有进行完标签的分配…)。

可是在看着我首页上那几个硕果仅存的tag(标签),我发现它们居然精确地将我网站上的内容表现了出来:

标签hot tag

从热门tag(标签)上可以看出:我的网站上最热门的是翻译类,再接下来是Ajax,在所有热门tag(标签)中,原创的内容是最小的。这符合我网站的情况:我的文章部分基本上都是一些翻译的文章,而原创的内容(我只放了一篇)很少,而这些翻译的文章中,相对来说ajax的会多一些,而css的文章虽然少,但是由于内容不错,点击率不低于ajax的文章。

我举这个例子的意思是什么呢?我想说的是:对于个人网站(由于像我这样的个人网站,基本上所有的文章或者内容都是自己完成,无论是写还是收集):良好的tag(标签),可以让来客在第一眼就能看明白你网站的内容是些什么,这些内容对于其它用户来说哪些比较好。而这些内容是你的导航系统,你的首页,你的网站地图所无法实现的;即使要实现,对于一般的用户来说,没有优秀的设计基础(比如我),没有对用户心理的准确揣摩(还是比如我),是无法很好地实现(现在我对自己网站最不满意的地方就是导航,连我自己都不知道哪些东西在菜单里看起来会更重要……)。

在这里要特别说明一下为什么要先说个人网站,因为现在似乎不少观点都认为tag(标签)对于单用户网站并没有用处,我觉得那是因为他们把tag(标签)的应用范围限得太死了。一个技术的出现,你很难说它最终会应用于什么地方,在不清楚的情况下就认为它对xxx无用,有点武断了吧……

继续我对tag(标签)对单用户站点的应用研究。我目前的想法是,对于个人网站来说(指单用户),热门tag(标签)应该是作为另外一套导航系统出现,当然,这么说有点偏简单化,但是对于用户来说,能够从足够简单的表现形式中快速地找到他们想要的东西,这既是用户的希望,也是我们的希望(不然我辛辛苦苦地打字干嘛?我又不需要练打字),当然,这也是对搜索引擎友好(我一直固执地认为:只有对用户友好,才是对搜索引擎友好,即使现在搜索引擎无法完全做到这一点,但我相信这也是他们的目标,他们也靠用户吃饭嘛)。使用tag(标签)系统,来将原来网站中的内容全部打散重排(套用流行语:解构和重构),而提供另外一套简单直观的导航系统,而这套导航系统中各个栏目(标签)的重要性,完全取决于用户的每一次点击,客观性、准确性会比自行定义的菜单好许多。

接下来该说多用户站点的tag(标签)了。因为我对多用户的站点并没有什么亲身体验,自然没法提出什么比较有建设性的建议,我能看到的只是现有的一些程序在实现上的缺憾,而这些缺憾有一定共性,即使在个人网站上也会存在(只是由于单用户站点上的tag和多用户站点比起来少了许多,问题并不那么明显。

首先自然是tag的杂乱无章:有tag字体变化的tag列表看上去还会让人找得着方向(盯着字大的冲过去就是了……),而那些所有字体一模一样大的tag(标签),就让人很头痛了。这只是样式的问题,比较混乱的则是tag(标签)的命名,在这一点上,我很喜欢flickr的tag,它的tag简洁明了,就是单独一个单词,而国内的tag(标签),放眼过去,都是一串串长长的字符串,让人有些郁闷……

相近内容的重复出现:这个情况出现的很频繁,我估摸着是由于在发表文章时提供给用户选择的tag(标签)不够智能化,至少得给用户一个递进式的tag(标签)输入选择(递进式:是指在输入部分字符的情况下,程序自动将开头为输入字符的所有符合内容显示出来供选择,现在流行的google suggest就是),让用户在输入自己的想法的同时,找到系统中已存在的tag(标签),而不必自行造tag。至少,WEB2和web 2.0这两个词不会再同时出现在tag(标签)列表了。

其实,对于多用户站点的tag(标签)的问题,都是由于一个问题:对于热点tag(标签)的过滤过于宽松,使得出现的tag(标签)过多,迫使用户在太多的信息中自行过滤掉不需要的内容,作为用户来说,在简单地判断寻找所需信息消耗的各种成本可能过大时,就会有一定的机率离开页面(是以我自己为例,我没有权威数据,仅作参考),转而寻找使用较低成本获取信息的途径,换成对站长有意义的话就是:你的pageview降低了。在热门tag(标签)的列表中,严格控制tag(标签)的数目,使得tag(标签)可以让人在几眼之中就可以扫遍,这是最好的途径:让用户在第一眼看到他需要的内容,这就会留住他(当然,让他看见一些意外的内容,也可以留住他,这也是热门tag(标签)的作用)。

说到这里,我开始将tag(标签)延伸到对整个网站的搜索上。我觉得,如果提供一种对自己网站tag(标签)内容的搜索,也许可以将现在常见的全文检索变得更加有趣。我的设想如下(该设想基于网站内部所有内容已经经过很好地tag,通过tag基本可以确定文章或者信息的内容):

  1. 在用户输入或者选择一个现有tag(标签)时,返回该tag(标签)的内容列表;
  2. 在用户输入或者选择两个或两个以上tag(标签)时,返回这几个tag(标签)的内容列表,其中那些符合两个或两个以上结果的内容将以明显的方式标注出来

第一条实际上和普通的tag(标签)点击没什么两样。有趣的是第二条,这第二条的最终效果就是:让用户注意到那些被或高亮或放大的交集结果(交集:两个集合之间重复的部分),在这里交集就是和搜索内容符合度最高的部分。用这种方式一描述,你就会发现,原来比较复杂的相关度查询,通过tag(标签)简化之后,似乎变得清晰起来。当然,具体的交集检验工作还是要作,不过这个工作要比直接全文检索判断相关度要简单许多(在不考虑在服务端数据库建立全文索引的情况下)。

在我发挥了一通发散性思维之后,我回到问题的一个症结所在:tag(标签)的定义。在现阶段,要实现优质的tag(标签),只能依靠用户的力量(即使是单用户站点,所依靠的依然是站点的最大用户:站长本人)。这部分的工作是程序无法替代的,作为服务的提供者,我们所能作的就是“教育”用户,如何更好地建立tag(标签),以及如何更有效地利用tag(标签),其余的事情,就让它自然发生吧。你会在tag(标签)上,看见概率所展现出来的令人窒息的美与魔力。

另:关于web2.0的定义,我认为实际上就是由访问者,也就是服务的受众主动提供信息,主动提供资源来丰富你的服务。从这点上来说,单用户站点使用tag(标签)并不违反web2.0的原则,只是,他们提供的是点击量,属于隐性资源而已。

附:我的简单算法,用php描述,不敢说多科学,我的主要目的实际上是将数字以一定的比例划分到一组数字中,以方便排序及过滤。

Language:  PHP
/*将标签作为一个数组返回,这个数组命名为$tags*/
//临时数组,保存每个标签的点击量
  $t = array();
//标签的最大点击量
  $max = 0; 
//遍历标签数组,将点击量保存进临时数组中,并取得最大点击量
  foreach ($tags as $r){
    $max=max($max,$r['count']);
    $t[]=$r['count'];
  }
//取得所有点击量的平均值,低于平均值的标签根本就不显示
  if (count($t)>0)
    $avg = array_sum($t)/count($t);
 
//初始化最小点击量
  $min = $avg+100000;
 
//遍历点击量数组
  foreach($t as $r){
//忽略小于平均值的点击量
    if ($r< $avg)continue;
//取得大于平均值的最小点击量
    $min = min($min,$r['count']);
  }
 
//这是最大点击量和最小点击量的倍数,等下作为中间值的参考对象
  $times = ceil($max/$min);
 
//遍历标签,准备输出
  foreach ($tags as $r){
//还是忽略小于平均值的点击量
    if ($r['count']<$avg)continue;
/*这是关键:将当前点击量除以最小点击量再乘以刚才算出的倍数,
  再乘以10,会得到一个10以内的数字,这就是其它标签相对于最大
  点击量标签和最小点击量标签的位置,然后再取整*/
    $c = ceil($r['count']/$min/$times*10);
//如果数字大于10,取10
    if ($c>10)$c=10;
//数字小于1,取1
    if ($c&lt;1)$c=1;
/*然后就可以输出标签了,爱怎么输出怎么输出,
$c作为一个标记用来标识标签的大小字体等*/
  }
分享家:Addthis中国

Leave a comment for: "标签之我见"

*

Tag Cloud