利用结巴和WordCloud进行中文分词及图云绘制入门

摘要:利用结巴分词对文本进行分词,并获取高频的关键词,之后对关键词绘制图云。

语言:python

库:jieba  wordcloud

python下中文的分词好多人推荐了“结巴”中文分词 [https://github.com/fxsjy/jieba],本文记录了使用该插件进行分词及后续操作的简单流程。

仿照官方demo,直接对一段话进行分词:


这里我们注意到,把标点符号也算作一个词了,如果不想要,jieba的git上也有对应的解决办法[https://github.com/fxsjy/jieba/issues/169]。可以对文本进行过滤中文符号或者对结果进行过滤,这里选择了后者。

第一步简单分词完成。

第二部,分词之后就可以获得整个文本中的高频词,这里结巴对TF-IDF[http://www.ruanyifeng.com/blog/2013/03/tf-idf.html]的实现,文本使用《孔乙己》示范,结果如下:


最后利用worldcloud来绘制词云,worldcloud本身是能够直接根据英文文本绘制的,而中文我们可以通过结巴获取带频率的高频词后,利用WordCloud().generate_from_frequencies()绘制。

但是wordcloud本身没有中文词库,需要自己指定词库文件位置,不然都是口口~


光分个《孔乙己》感觉不是很过瘾,网上找了一本鲁迅全集来试着分分,重复前面的步骤,选词数设置为500:


这里发现 ‘鲁迅’,‘先生’这两个词过多了,文章里怕是不应该出现的。遂看了一下这个文件,发现里面非常多的注释,这样就解释的通了。TF-IDF方法下,如果觉得提取出文本中的无用词频率过高,那么可以相应的调整逆向文件频率(IDF)文本语料库,但这里直接删除这几个碍事的结果就算了。

还有“九三三年”,“一九二”,分词也不对。可以利用jieba的动态调整词典的接口,如:

jieba.suggest_freq('一九三三', True)

最后结果如下:


再利用wordcloud的mask功能,添加上词云形状,结果如下:


附:看到的一些关于 主题模型 LDA的简介,觉得挺好,这里也记录一下,核心就是


利用这个公式,将对文章语义的判断从简单的高频词比较提升到 高频词汇+文章主题。

详见链接[http://blog.csdn.net/huagong_adu/article/details/7937616]