使用Matrix67的数据挖掘方法为博客作用词分析

今天早上看到Matrix67的《互联网时代的社会语言学:基于SNS的文本数据挖掘》一文,如获至宝。我很久以前也做过人人网流行的日志中喜欢用哪些词的 实验,不过仅仅使用程序抓取网页和获取二字组合,然后还要依靠人工来筛选正确的词语,这种方法效果并不好,而且最后也没能得出什么非常有趣的结论;而 Matrix67这篇文章非常通俗地讲解了作者使用的中文抽词方法和热度分析方法,这些方法巧妙却不复杂,得到的效果还相当不错,使我不可救药地踏上了亲 自把它实现一遍的征程上。

首先我用Python实现了Matrix67的中文抽词方法,并把这种方法应用在自己博客的rss上,然后把抽取得到的词语按照出现频率排序,得到的结果如下:

什么,我们,自己,大学,东西,可以,没有,作业,我的大学,所以,如果,时间,因为,文章,那么,现在,其实,大作业,比如,知道,障碍,代码……

看起来效果非常不错,于是我又尝试了另外几位朋友的博客。首先是橘子的,结果如下:

面试,公司,然后,什么,最后,没有,开始,应该,时间,测试,题目,这样,项目,怎么,大家,我们,自己,香港,由于,可以,实习,其实……

以及sqybi童鞋的:

算法,没有,诚哥,言叶,世界,置换,页面,可以,网页,自己,内存,如果,已经,所以,列表,我们,之后,因为,什么,开始,那么,过程,页面置换……

(一开始看到“诚哥”这个词语我还以为是哪里抽词出错了,后来仔细看了下sqybi童鞋的博客发现原来这个真的是个词语……)

这段程序的源代码被我放在了gist的上面,有兴趣的同学可以猛击这里。 抽词的结果非常好,但是这个结果还是有些问题:一是直接访问博客的rss只能获取最近10篇左右的文章,样本太小,不能充分反映这个博客的特点;二是各个 博客得到的抽词结果中出现频率较高的一般都是像“可以”、“没有”、“什么”这类非常常用的词语,不同的博客之间的差异不能够鲜明地反应出来。解决前一个 问题的方法是使用Google Reader,在浏览器中输入”http://www.google.com/reader/atom/feed/http://www.liyaos.com/blog/feed?n=100″这种链接便可以获取一个博客最近的100篇文章(需要先登录Google Reader,这使得直接用程序访问变得有点麻烦,不过我直接采用了在浏览器打开这个页面然后保存到本地,再用程序读取),格式为Atom,和rss很 像,也都可以使用Python的feedparser来轻松解析。解决后一个问题,则是Matrix67的文章后半部分提到的贝叶斯方法。

于是我使用前面的程序分析了以下数个博客(排名不分先后,嗯 = =):

把以上博客分析的所有结果作为总的词语库,然后再对每个博客使用Matrix67的文章中给出的概率公式进行计算,然后把得到的词语按照其概率值从大到小排序。以上博客的词语前10名分别为:

优哉·幽斋

我的大学,寻欢,词语,诗音,一段,梦里醉逍遥,大哥,中国人,学期,障碍

(“我的大学”来自《我的大学》系列,“寻欢”、“诗音”和“大哥”来自《多情码农无情码》)

SQYBI.COM

赫萝,诚哥,言叶,你们,罗伦斯,方茴,安竹,季安竹,李暮霭,远子学姐

(……这些都是什么啊……)

伸手即到梦想

期末,接着,成都,排队,假期,实习,福州,香港,世博,一趟

(显然高富帅的生活很丰富啊 = =)

静观己心,厚积薄发

太太,奶奶,三奶奶,姑娘,丫头,未央,老太太,三太太,笑道,素馨

(……………………我快笑惨了)

非人磨墨墨磨人

一个,成为,冯至,拉里,袁枚,里尔克,毛姆,那样,文学,十四

(虽然不知道博主在说什么,但是看起来好厉害的样子)

学而时嘻之

学家,根本,能力,原子,经济学,际上,最好,我认为,科研,辐射

(这篇博客的文章里讲什么学家的都有……所以“学家”就被当作词了,看来是信息熵的阈值还不够大,不过我的实验样本也不够大所以把阈值调大效果不一定会更好……)

宇宙的心弦

原理,怪物,动量,定义,几何,力学,角动量,收益,量子,液氮

(一看就知道学什么的……)

考据癖

考据,起床,笑声,星期五,胡克,培根,说法,蚊子,发音,星座

(考据癖什么都考啊……)

嗯,这个结果相当有趣的吧。

PS:本来还想拿来韩寒、蒋方舟的博客分析一下,但是这两个家伙的新浪博客都不提供全文阅读,只好作罢。