构建云图分析主要包括以下三个步骤:
- 中文分词:jiebaR
- 词频统计:table函数
- 创建云图:wordcloud
jiebaR中文分词
“结巴”中文分词的R语言版本,支持最大概率法(Maximum Probability),隐式马尔科夫模型(Hidden Markov Model),索引模型(QuerySegment),混合模型(MixSegment),共四种分词模式,同时有词性标注,关键词提取,文本Simhash相似度比较等功能。项目使用了Rcpp和CppJieba进行开发。
安装
首先安装所需的分词包jiebaR,进行简单的分词尝试
#install.packages('jiebaR')
library("jiebaR")
mixseg = worker()
res = mixseg["江州市长江大桥参加了长江大桥的通车仪式"]
res
分词
jiebaR提供了四种分词模式,可以通过 worker() 来初始化分词引擎,使用 segment() 进行分词。
# 接受默认参数,建立分词引擎
mixseg = worker()
# 相当于:
# worker( type = "mix", dict ="somepath/dict/jieba.dict.utf8",
# hmm = "somepath/dict/hmm_model.utf8", # HMM模型数据
# user = "somepath/dict/user.dict.utf8") #用户自定义词库
mixseg["江州市长江大桥参加了长江大桥的通车仪式"] # `<=` 或 `[` 为分词运算符
# 相当于 segment( "江州市长江大桥参加了长江大桥的通车仪式" , mixseg )
# 或者 mixseg <= "江州市长江大桥参加了长江大桥的通车仪式"
支持对文件进行分词:
#本文使用2016年两会政府工作报告的一部分作为例子
mixseg["C:/Users/zluck/Documents/R/2016工作重点.txt"]
# 自动判断输入文件编码模式,默认文件输出在同目录下。
# 等同于segment( "C:/Users/zluck/Documents/R/2016工作重点.txt" , mixseg )
关键词提取
关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径,使用方法与分词类似。 topn 参数为关键词的个数。
keys = worker("keywords", topn = 5)
keys <= "我爱北京天安门"
keys <= "C:/Users/zluck/Documents/R/2016工作重点.txt" #举个例子
词频统计
本文利用table()函数进行词频统计,python的字典功能貌似更容易一些,不过需要配置中文环境,可能稍微有些麻烦,随后会尝试使用
#读取分词文件,读取结果为一个字符串向量
mytxt<-readLines("C:/Users/zluck/Documents/R/words.txt",encoding='UTF-8')
#利用strsplit()对字符串向量进行分割,得到由词语组成的一个列表
mytxt<-strsplit(mytxt,split = " ")[[1]]
#利用table进行词频统计
t<-table(mytxt)
#提取词语
words<-names(t)[-c(which(names(t)=="的"),which(names(t)=="和"))]
#提取频数
freq<-as.vector(t)[-c(which(names(t)=="的"),which(names(t)=="和"))]
创建云图
wordcloud包中的wordcloud()函数可以直接绘制云图,一步到位
wordcloud函数介绍
wordcloud(words,freq,scale=c(4,.5),min.freq=3,max.words=Inf, random.order=TRUE, random.color=FALSE, rot.per=.1, colors=”black”,ordered.colors=FALSE,use.r.layout=FALSE, fixed.asp=TRUE, …)
具体参数介绍详见help()文件
具体使用案例
1.安装加载程序包
#install.packages('wordcloud')
library(wordcloud)
2.给出字体颜色
自己指定字体颜色
colors=c('red','blue','green','yellow','purple')
或者使用R颜色程序包中现成的主题模板
colors=brewer.pal(9,"Set1")
3.执行函数
wordcloud(words,freq,scale=c(3,0.3),min.freq=-Inf,max.words=Inf,
colors=colors,random.order=F,random.color=T,
ordered.colors=F,encoding='UTF-8')
这样我们就得到了2016年两会政府工作报告的一幅云图,从中可以明显看到报告的重点——发展,so,简单有趣,不断尝试,不断发现新乐趣。
Tips
-
Rmarkdown输出过程中如果有超过50条warning(),不会导致文件无法编译,而是导致最终输出的pdf文件最后有很多页的错误提示,解决这一问题的方法是在插入命令处设置warning=FALSE,例如{r,warning=FALSE}
-
在使用Rmarkdown的过程中,经常会涉及到中文的输出,在R中可以顺利输出的中文在Rmarkdown中会相当麻烦,关于Rmarkdown涉及中文的图片输出难题,目前个人找到的最简单的解决方法是加载showtext包,在绘图命令处设置fig.showtext=TRUE,{r,fig.showtext=TRUE},具体可以参考rmarkdown转化中文字符为PDF的设置及showtext package integration
展示一下成果: