博客新增标签云
2016-11-27 by Dron
背景
标签,是对一件事物的标志性描述,通常都会采用相关性很强的关键字,以便于检索和分类,网络上的应用已然十分广泛。
在此前,我对标签并不感冒,所以我的文章一直以来都从不用标签来管理,也不加任何分类,直到前天与同事聊天,当被问到我的博客都写些什么内容时,我竟一时无法很好回答。
现在再问我同样的问题,我会直接让他去看看这个页面 —— 标签云。
这是我突然加上去的功能,与传统博客标签最大的区别在于,它并不是我手动打上去的,而是写程序自动算出关键字,再综合所有文章的结果得出。
这里值得一题的是,上图标签云的效果,用的是一台湾同胞写的一个 wordcloud2.js,效果相当赞的说。
自动提取关键字
我的算法也许没有各位想象中的复杂,既没有用到词库,也不需要语料库,只是简单提取 TOP 词频而己:从头到尾扫描文章,首先 10 个字 10 个字扫,再 9 个字,8 个字,...,直到 2 个字截止,经过词频统计,最高的前 10 个词汇作为一篇文章的关键字。
这其中会涉及几个细节问题:
英文
我的博客文章都是中文为主,英文字母和单词直接过滤,不让它们出现在关键字当中。当然,如果说英文单词也要做为关键字,我仍然不采用英文词库,而直接以 \b
作为单词边界简单分词,这个功能点也许将来会做升级,目前没有详细计划。
无意义的虚词
「的、地、得、着、了、过」这种,由于扫描之前不做分词,扫描结果可想而知会包含大量的虚词,使得关键字很不理想,我的处理方法是过滤掉虚词,最终得到的关键字看起来就像是一些有意义的词组。
这里 有篇文章 罗列了大量的中文虚词。
排序权重
词频作为第一排序维度,越高的越靠前,此外词频相同的以关键字长短来排序,越长的越靠前,如果关键字长短还相同就以文档中默认的出现顺序为准。
舍弃断词
这也是没做分词的结果,傻瓜式的扫描通常会存在「乒乓球」「乓球」同在关键字列表的这种搞笑现象,这里简单做了处理:以长的词汇为基准,长的词汇如果刚好包含短的词汇,那么短的词汇将会被舍弃掉。
合并所有文章结果
每篇文章最终都会得到最多 10 个结果,这些结果汇总到一起可以做一些有意义的事情:
- 出现相同关键字的文章被称为「相关文章」,可以接着用来做推荐;
- 所有结果合在一起,可以用来做标签云;
- 单篇文章的结果,可协助分析文章质量,罗嗦词汇可以修改;
- 还有更多,可以继续 YY...
结束语
通过得到的标签云,果然「游戏」出现次数是最多的,算是比较符合实际情况吧。我感兴趣的方向、过去写的 Demo 和文章,多数部分都和「游戏」有关,只是近来觉得有点腻味罢了,换换口味搞点和设计相关的事情,希望后面写的,可以和设计相关性多一些。
(本文完)