基于Python和R语言的分词/词频统计/词云图
前几天发现了一个好东西,[WordCloud2]~能够画出词云图,很想知道是什么就拿来用一用。
步骤如下:
1、分词
首先使用分词工具去把一个文档的词语中文划分。
所以就不管三七二十一了,选了一个最好用的(最简单)Rwordseg包。
分词是自动化的,我们可以添加字典如下:
也可以添加自己的词汇:
在 R语言代码如下
代码块
library(Rwordseg)
library(rJava)
text<-"路径名称"
segmentCN(text)
效果如下:分词前:
面对生死存亡的严峻考验,从1934年10月至1936年10月,
红军第一、第二、第四方面军和第二十五军进行了伟大的长征。
我们党领导红军,以非凡的智慧和大无畏的英雄气概
分词后:
面对 生死存亡 的 严峻 考验 从 1934年 10月 至 1936年 10月
红军 第一 第二 第四 方面 军 和 第二十五 军 进行 了 伟大 的 长征
我们 党 领导 红军 以 非凡 的 智慧 和 大 无畏 的 英雄 气概
分词前 为####.txt文件 ,分词后得到####.segment.txt文件
2、统计词频
这里读取步骤一得到的 ####.segment.name使用遍历循环,将结果使用字典进行储存。值得注意的是,由于要滤掉一些无用的词汇,比如“的”“得”“地”,使用了以一个“滤波器”~如下所示,该滤波器内容可以自定义。
stri="我你他太她跟着那会让都吗得一刚这就地的了是和至下也们有从上和还在当来为要新123456789\
与中对以一把不所其而到".decode("utf8")
if word not in stri and len(word)!=0:
#写我们的过滤部分
整体代码如下
#coding=utf-8
import re
import collections
'''''
从文件中读取内容,统计词频
'''
def count_word(path):
result = {}
with open(path) as file_obj:
stri="我你他太她跟着那会让都吗得一刚这就地的了是和至下也们有从上和还在当来为要新123456789\
与中对以一把不所其而到".decode("utf8")
all_the_text = file_obj.read()
#正则表达式替换特殊字符
#all_the_text = re.sub("\"|,|\.","", all_the_text)
for word in all_the_text.split():
# print word.decode("utf8")
word=word.decode("utf8")
if word not in stri and len(word)!=0:
if word not in result:
result[word] = 0
result[word] += 1
return result
'''''
以词频倒序
'''
def sort_by_count(d):
#字典排序
d = collections.OrderedDict(sorted(d.items(), key = lambda t: -t[1]))
return d
if __name__ == '__main__':
file_name = ""
f=open("",w)
dword = count_word(file_name)
dword = sort_by_count(dword)
print "Word"",Freq"
for key,value in dword.items():
try:
f.writelines(key + ",%d" % value)
except:
print "q"
f.close()
这个 样子我们就得到了词频统计的文件,注意把它保存为csv格式
3、作词云图
到了最激动人心的时候了,其实也没什么,就是在R语言里使用wordcloud2安装包,代码如下:
library(wordcloud2)
wenjian<-"文件路径"
wordcloud2(wenjian, size = 2, fontFamily = "微软雅黑",
color = "random-light", backgroundColor = "grey")
一个案例:
分词前:
分词后:
词频图:
最终结果图: