Weighted Categories 这个插件经过修改之后可以用来显示 TagCloud。 但是这个插件显示出的 TagCloud 总觉得有点别扭。一般人都是擅长某几个方面,很少样样精通的, 因此一般的博客总是会出现几个文章数非常多的标签,以及大量仅有一两篇文章的标签。 而 Weighted Categories 插件使用四则运算来计算标签的大小(附图公式(1)),结果就造成几个巨大标签混杂在大量的小标签中的 “众星捧月”的现象。

例如,假设有四个标签,文章数分别为 tagA=100、tagB=10、tagC=5、tagD=1,标签级别为 1~10,则各个标签的级别如下:

标签文章数计算式 级别
tagA100 100 / 99 * 9 + 1 10
tagB10 10 / 99 * 9 + 1 1
tagC5 5 / 99 * 9 + 1 1
tagD1 1 / 99 * 9 + 1 1

显然,由于tagA的存在,其他标签都被挤到了最底层。

解决这个问题的方法就是利用对数函数。(对数函数的效果可见本文。) 计算公式见附图公式(2)。

公式(2)的结果与对数的底是无关的,见公式(3)。

用公式(2)计算上例得到下面的结果:

标签文章数计算式 级别
tagA100 log(100) / (log(100)-log(1)) * 9 + 1 10
tagB10 log(10) / (log(100)-log(1)) * 9 + 1 5
tagC5 log(5) / (log(100)-log(1)) * 9 + 1 4
tagD1 log(1) / (log(100)-log(1)) * 9 + 1 1

显然这个结果要比原来的结果漂亮多了。

tagcloud-ev.png