统计中文RSS博客中的词频

     为什么会想到这个事呢,在看《集体智慧编程》这本书的时候,第三章通过feedparser读取博客的题目跟摘要,然后统计其中包含了哪些词,并统计每个词在博客中出现的次数以及总共在多少篇博客中出现。然而,本书所给的RSS中有很多连接不上,于是乎,就像弄一个中文的RSS读取并统计中文词的词频,然后做一个聚类。虽然说互联网是英文的,但是,咱也可以试试嘛。

首先从feedparser这个模块开始,额.这个模块应该就不用过多的介绍了吧,一个读取RSS内容的模块

d = feedparser.parse(url),返回的是一个FeedParserDict,就是具有feedparser特色的字典,字典所具有的键如下

dict_keys(['feed', 'status', 'version', 'encoding', 'bozo', 'headers', 'href', 'namespaces', 'entries'])

我们需要的就是entries这个东东,而d.entries返回的是一个列表,列表中存的就是该entries下所有的文章信息

通常使用一个for循环对其进行一个遍历, k = d.entries[0]就是第一篇文章,而k也是一个FeedParserDict,键如下:

dict_keys(['summary_detail', 'published_parsed', 'links', 'title', 'author', 'summary', 'guidislink', 'title_detail', 'link', 'authors', 'author_detail', 'id', 'published'])

我们所需要的信息就是k.summary和k.title

而这两个的value是 unicode!!!!!!,哎..难怪用正则表达式进行筛选的时候怎么都是返回空列表,真是蠢到家了。

然后恶补了一番Unicode,UTF-8等编码,找到了从Unicode编码中筛选汉字的方法

z = re.compile(u"[\u4e00-\u9fa5]{n,m}")

正则表达式搞定了,从summary与title中提取所有中文,并通过jieba这个模块对其进行分词


def hanzi(html):
    pat = re.compile(u"[\u4e00-\u9fa5]{1,2}")
    txt = re.findall(pat, html)
    c = ''
    text = c.join(txt)
    words = [word for word in jieba.cut(text, cut_all=True) if len(word) >= 2]
    return words

然后就是将每个entries中的title跟词write到txt中,并且在对d进行遍历的过程中,记录所有所出现的词的频次

为了防止类似“的”“了”这样的词(事实证明还有像“相关 1022”“记者 623”这些词往往占据词频的前几),所以将单词在每个博客中出现的概率设置一个阈值,只统计小于这个阈值的词。设置成0.7时统计到的词频为

设置成0.4时为


额..可能跟RSS源有关,不过不得不说,今天晚上女足奥运预选赛,哈哈,觉得这个还是有一定参考价值的

TXT中存储了所有RSS title跟summary中出现的汉字,如图

好吧,这样只完成了第一步,下面就是对这些数据进行聚类玩了

你可能感兴趣的:(python,rss)