博客新增标签云

2016-11-27 by Dron

背景

标签,是对一件事物的标志性描述,通常都会采用相关性很强的关键字,以便于检索和分类,网络上的应用已然十分广泛。

在此前,我对标签并不感冒,所以我的文章一直以来都从不用标签来管理,也不加任何分类,直到前天与同事聊天,当被问到我的博客都写些什么内容时,我竟一时无法很好回答。

现在再问我同样的问题,我会直接让他去看看这个页面 —— 标签云

这是我突然加上去的功能,与传统博客标签最大的区别在于,它并不是我手动打上去的,而是写程序自动算出关键字,再综合所有文章的结果得出。

这里值得一题的是,上图标签云的效果,用的是一台湾同胞写的一个 wordcloud2.js,效果相当赞的说。

自动提取关键字

我的算法也许没有各位想象中的复杂,既没有用到词库,也不需要语料库,只是简单提取 TOP 词频而己:从头到尾扫描文章,首先 10 个字 10 个字扫,再 9 个字,8 个字,...,直到 2 个字截止,经过词频统计,最高的前 10 个词汇作为一篇文章的关键字。

这其中会涉及几个细节问题:

英文

我的博客文章都是中文为主,英文字母和单词直接过滤,不让它们出现在关键字当中。当然,如果说英文单词也要做为关键字,我仍然不采用英文词库,而直接以 \b 作为单词边界简单分词,这个功能点也许将来会做升级,目前没有详细计划。

无意义的虚词

「的、地、得、着、了、过」这种,由于扫描之前不做分词,扫描结果可想而知会包含大量的虚词,使得关键字很不理想,我的处理方法是过滤掉虚词,最终得到的关键字看起来就像是一些有意义的词组。

这里 有篇文章 罗列了大量的中文虚词。

排序权重

词频作为第一排序维度,越高的越靠前,此外词频相同的以关键字长短来排序,越长的越靠前,如果关键字长短还相同就以文档中默认的出现顺序为准。

舍弃断词

这也是没做分词的结果,傻瓜式的扫描通常会存在「乒乓球」「乓球」同在关键字列表的这种搞笑现象,这里简单做了处理:以长的词汇为基准,长的词汇如果刚好包含短的词汇,那么短的词汇将会被舍弃掉。

合并所有文章结果

每篇文章最终都会得到最多 10 个结果,这些结果汇总到一起可以做一些有意义的事情:

  • 出现相同关键字的文章被称为「相关文章」,可以接着用来做推荐;
  • 所有结果合在一起,可以用来做标签云;
  • 单篇文章的结果,可协助分析文章质量,罗嗦词汇可以修改;
  • 还有更多,可以继续 YY...

结束语

通过得到的标签云,果然「游戏」出现次数是最多的,算是比较符合实际情况吧。我感兴趣的方向、过去写的 Demo 和文章,多数部分都和「游戏」有关,只是近来觉得有点腻味罢了,换换口味搞点和设计相关的事情,希望后面写的,可以和设计相关性多一些。

(本文完)