关于TagCloud显示算法的讨论
Weighted Categories 这个插件经过修改之后可以用来显示 TagCloud。 但是这个插件显示出的 TagCloud 总觉得有点别扭。一般人都是擅长某几个方面,很少样样精通的, 因此一般的博客总是会出现几个文章数非常多的标签,以及大量仅有一两篇文章的标签。 而 Weighted Categories 插件使用四则运算来计算标签的大小(附图公式(1)),结果就造成几个巨大标签混杂在大量的小标签中的 “众星捧月”的现象。
例如,假设有四个标签,文章数分别为 tagA=100、tagB=10、tagC=5、tagD=1,标签级别为 1~10,则各个标签的级别如下:
标签 | 文章数 | 计算式 | 级别 |
tagA | 100 | 100 / 99 * 9 + 1 | 10 |
tagB | 10 | 10 / 99 * 9 + 1 | 1 |
tagC | 5 | 5 / 99 * 9 + 1 | 1 |
tagD | 1 | 1 / 99 * 9 + 1 | 1 |
显然,由于tagA的存在,其他标签都被挤到了最底层。
解决这个问题的方法就是利用对数函数。(对数函数的效果可见本文。) 计算公式见附图公式(2)。
公式(2)的结果与对数的底是无关的,见公式(3)。
用公式(2)计算上例得到下面的结果:
标签 | 文章数 | 计算式 | 级别 |
tagA | 100 | log(100) / (log(100)-log(1)) * 9 + 1 | 10 |
tagB | 10 | log(10) / (log(100)-log(1)) * 9 + 1 | 5 |
tagC | 5 | log(5) / (log(100)-log(1)) * 9 + 1 | 4 |
tagD | 1 | log(1) / (log(100)-log(1)) * 9 + 1 | 1 |
显然这个结果要比原来的结果漂亮多了。