1、直接上源码:
-----------------------以下是源码,直接复制即可使用---------------------------------
#调入分词的库
library("rJava")
library("Rwordseg")
#调入绘制词云的库
library("RColorBrewer")
library("wordcloud")
#读入数据(特别注意,read.csv竟然可以读取txt的文本)
myfile<-read.csv(file.choose(),header=FALSE)
#预处理,这步可以将读入的文本转换为可以分词的字符,没有这步不能分词
myfile.res <- myfile[myfile!=" "]
#装载分词词典(如果需要的话,我这里没有装载,下面有说明)
#分词,并将分词结果转换为向量
myfile.words <- unlist(lapply(X = myfile.res,FUN = segmentCN))
#剔除URL等各种不需要的字符,还需要删除什么特殊的字符可以依样画葫芦在下面增加gsub的语句
myfile.words <- gsub(pattern="http:[a-zA-Z\\/\\.0-9]+","",myfile.words)
myfile.words <- gsub("\n","",myfile.words)
myfile.words <- gsub(" ","",myfile.words)
#去掉停用词
data_stw=read.table(file=file.choose(),colClasses="character")
stopwords_CN=c(NULL)
for(i in 1:dim(data_stw)[1]){
stopwords_CN=c(stopwords_CN,data_stw[i,1])
}
for(j in 1:length(stopwords_CN)){
myfile.words <- subset(myfile.words,myfile.words!=stopwords_CN[j])
}
#过滤掉1个字的词
myfile.words <- subset(myfile.words, nchar(as.character(myfile.words))>1)
#统计词频
myfile.freq <- table(unlist(myfile.words))
myfile.freq <- rev(sort(myfile.freq))
myfile.freq <- data.frame(word=names(myfile.freq), freq=myfile.freq);
#按词频过滤词,过滤掉只出现过一次的词,这里可以根据需要调整过滤的词频数
myfile.freq2=subset(myfile.freq, myfile.freq$freq>=2)
#绘制词云
#设置一个颜色系:
mycolors <- brewer.pal(8,"Dark2")
#设置字体
windowsFonts(myFont=windowsFont("华文彩云"))
#画图
wordcloud(myfile.freq2$word,myfile.freq2$freq,random.order=FALSE,
random.color=FALSE,colors=mycolors,family="myFont")
-------------------------源码结束-------------------------------
2、看看效果
3、关于停用词
停用词就是没有实际意义,但使用频率又很高的词,比如"的、地、得、当然、并且、而且、去、拿、好"等等。这类词语对分析、绘制词云都有干扰,需要去掉。可以到网上找找"停用词表",是个txt文件,每个词一行。一般有2个版本,分别为500多个词、1000多个词。我用了后一个版本。
4、关于如何准确分词
首先,"Rwordseg"库的分词已经很不错了,调用了java的分词程序进行分词,分词的精度高、速度快,还能标注词性,其算法采用中科院的ictclas中文分词算法,基于隐马尔科夫模型(HMM)进行分词,且开源。算是目前国内中文分词的佼佼者。
其次,就算"Rwordseg"的分词很精准,但程序总归是程序,算法总归是算法,实际分词过程中仍然会出现误差。比如会将"两岸关系"分为"两岸"、"关系",把"港澳特别行政区"分为"港澳"、"特别"、"行政区"。实际上这两个词都是整体词,不用分开。要修正这种误差,需要自己提供修正词库。
"Rwordseg"可以导入2种类型的词库来修正,一种是txt版本的词库,一种是scel版本的词库(就是搜狗输入法的细胞词库)。对txt版本的词库,自己新建一个即可,把一些自定义的、特殊的词语输入进去,每个词一行就可以了;对scel版本的词库,直接到搜狗输入法的官方网站下载就可以了,比如需要分词的文章是计算机方面的 ,就下载一个计算机专业的细胞词库。
搞好词库后,用下面的语句就可以装入内存:
installDict(file.choose(),dictname = "my dict")
查看装载的词典:
listDict()
删除安装的词典:
uninstallDict()
5、关于对wordcloud的吐槽
Wordcloud虽然给R提供了绘制词云的功能,但是,实际上,根本上,不具备美感!功能还很单薄,比如形状不能改变等等。