绘制词云图所用包为worldcloud,
绘制词云图第一步是中文分词,中文分词包中最出名的是Rwordseg和jieBar.
先讲解第一种,Rwordseg依赖于rJava包和Java环境
使用Rwordseg分词绘制词云图
安装Java环境
jdk可到oracle站点下载,下载完成需设置环境变量,在系统变量新建如下变量
1.JAVA_HOME:D:\Java #jdk安装路径
2.ClassPath : .;%JAVA_HOME%\lib(注意前面的.和分号)
3.R_HOME : D:\R-3.3.1 #R安装路径
在系统变量的Path下增加:
%R_HOME%\bin\i386
%R_HOME%\library\rJava\jri
%JAVA_HOME%\jre\bin
%JAVA_HOME%\jre\bin\server或者%JAVA_HOME%\jre\bin\client ,具体看jvm.dll位于哪个子文件
%JAVA_HOME%\bin
安装Rwordseg
安装rJava,直接使用install.packages("rJava")安装即可
安装Rwordseg ,在"http://R-Forge.R.project.org中,安装方式可参考基础指令笔记
还需安装tmcn、tm包
代码
library(xlsx)
data <- read.xlsx("D:/dataset/test.xls", 2, header=T,encoding='UTF-8')
content <- data['content'][1]#可以直接根据列名调用
#文本分析
library(tmcn)
library(Rwordseg)
library(tm)
library(wordcloud)
content <- unlist(content)#excel中的一列通常是list格式,unlist后变成numertic格式
content <- as.character(content)#将其变成字符串格式
insertWords(c("特朗普")) #向词典临时插入特朗普
d.vec <- segmentCN(content, returnType = 'tm') #分词
直接绘制词云图
wc <- getWordFreq(unlist(d.vec), onlyCN = TRUE)
wordcloud(wc$Word,wc$Freq,colors = rainbow(length(wc$Freq)))
处理后再绘制词云图
yuliaoku<-Corpus(VectorSource(d.vec)) #建立语料库
yuliaoku<-tm_map(yuliaoku,stripWhitespace) #去除空白
control<-list(wordLengths=c(1,5),stopwords=stopwordsCN()) #去除停用词
mt<-TermDocumentMatrix(yuliaoku,control = control) #生成包含词频的结构化的词条-文档矩阵
vmt<-as.matrix(mt)
val<-sort(rowSums(vmt),decreasing = TRUE) #按词频排序
df<-data.frame(word=names(val),freq=val)
wordcloud(df$word,df$freq,min.freq = 3,random.order = FALSE,colors = rainbow(length(row.names(vmt))),scale=c(4,.5)) #画词云图
使用jieBar分词绘制词云图
library(xlsx)
data <- read.xlsx("D:/dataset/test.xls", 2, header=T,encoding='UTF-8')
content <- data1['content'][1]
content <- unlist(content)
content <- as.character(content)
content <- sub('#人民的名义#','',content) #删除某个词汇
library(jiebaR)
cutter=worker()
new_user_word(cutter,c("秒拍视频")) #插入词汇
segWords<-segment(content,cutter)
segWords<-filter_segment(segWords,stopwordsCN())
segWords<-gsub("[0-9]+?","",segWords) #删除数字
library(stringr)
segWords<-str_trim(toUTF8(segWords))
library(plyr)
tableWord<-count(segWords)
a <- tableWord[order(tableWord[2],decreasing = TRUE),]
a <- na.omit (a) #去除NA值
wordcloud(a[,1],a[,2],random.order=F,col= rainbow(length(a$freq)),scale=c(8,.5),max.word = 200) #展示词频最大的前200个词的词云图
网友评论