R中文分词、绘制云图笔记

1. 准备工作(配置Java环境、安装分词包Rwordseg、rJava、tm,操作顺序如下)
(1). 安装JDK、配置Java环境
JDK的安装就按照提示一直next下去就行了,不过安装中一定要注意:JDK安装过程中会出现两次选择路径,第一次是安装JDK,第二次是安装Jre,一定要将这两个的安装路径分开,否则那么jre包中的内容会覆盖掉jdk中的内容,因此,在你安装完成之后,会发现找不到tools.jar和dt.jar包,这会给你后续的工作造成很多没办法检查的问题,所以这里还是要注意以下。 Java环境的配置网上的教程到处都是,我就不做赘述,在网上找了一个有图有讲解的教程供大家参考
(在此谢谢博主Belieflee的辛苦整理的详细教程) JDK配置教程
(2). 下载rJava包
配置好Java环境接下来就可以直接下载rJava包了,我在做的过程中这一步没有遇到什么问题,下载安装一步到位顺利地怀疑自己,不过我好像是先下载好所有包才开始统一安装
(3). 下载Rwordseg包
这个包用install.package()指令并不能下载,因此我在网上下载了安装包
Rwordseg包下载地址R上很多有用的包都可以直接在这个网站上下载。
(4). 安装 Rwordseg、rJava包
Rwordseg包本地安装过程过程如下

注:这里本地安装时最好不要直接将压缩文件直接解压到R中的library文件中,这样虽然不会有什么严重的影响但是在执行library(Rwordseg)后出现如下的乱码,看着很别扭,逼死强迫症!!!!

(5). 下载tm包
当时因为这个包引起的中文乱码问题简直折磨地人死去活来,尝试了网上各种转换文件编码的方式均以失败告终,最后在论坛上找到一个大神给的修改后的tm包,重新安装加载问题解决,神奇的tm包修订版后续上传,包的安装方法和Rwordseg包相同。
(6). 加载各种包`
library(wordcloud)
library(BH)
library(NLP)
library(tm)
library(rJava)
library(Rwordseg)
library(wordcloud2)
加载完包就可以开始分词绘制云图
2. 分词过程
(1). 加载词包
词包可以在搜狗词库中直接下载相关的词包,可以提前分析以下待分词的文件的主要内容,尽量下载关联度高的词库然后将下载的词包压缩直接文件放在如下文件夹下

~.\programfile\R\R-3.3.2\library\Rwordseg\dict


将词包加载进来
`installDict(“D:/programfile/R/R-3.3.2/library/Rwordseg/dict/计算机词汇大全【官方推荐】.scel”,”computer”)

(2). 文件读入和预处理

#读入数据(特别注意,read.csv竟然可以读取txt的文本)
copyrightjson <- read.csv(file.choose(),header = FALSE)

#预处理,这步可以将读入的文本转换为可以分词的字符,没有这步不能分词
copyrightjson.res <- copyrightjson[copyrightjson != " "]

(3). 分词、文件清洗、词频统计

分词,并将分词结果转换为向量
copyrightjson.words <- unlist(lapply(X = copyrightjson.res,FUN = segmentCN))

#剔除字符、数字、空格、回车等等各种不需要的字符,还需要删除什么特殊的字符可以依样画葫芦在下面增加gsub的语句
copyrightjson.words <- gsub(pattern="[a-zA-Z\\/\\.0-9]+","0",copyrightjson.words)
copyrightjson.words <- gsub("\n","",copyrightjson.words)
copyrightjson.words <- gsub(" ","",copyrightjson.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])
}
stopwords_CN <- enc2utf8(stopwords_CN)                                                                    #转utf-8
stopwords_CN <- stopwords_CN[Encoding(stopwords_CN)!="unknown"]                                           #去除未知编码字符
for(j in 1:length(stopwords_CN)){
  copyrightjson.words <- subset(copyrightjson.words,copyrightjson.words!=stopwords_CN[j])
}

#过滤掉1个字的词
copyrightjson.words <- subset(copyrightjson.words, nchar(as.character(copyrightjson.words))>1)

#统计词频
copyrightjson.freq <- table(unlist(copyrightjson.words))
copyrightjson.freq <- rev(sort(copyrightjson.freq))
copyrightjson.freq <- data.frame(word=names(copyrightjson.freq), freq=copyrightjson.freq)
copyrightjson.freq <- subset(copyrightjson.freq, select = -freq.Var1 ) 

3. 绘制云图

#按词频过滤词,过滤掉出现频率过少的词频
copyrightjson.freq2=subset(copyrightjson.freq, copyrightjson.freq$freq.Freq >= 200)

#绘制词云
js_color_fun = "function (word, weight) {

return (weight > 5000) ? '#f02222' : '#c09292';

}"
wordcloud2(copyrightjson.freq2, color = htmlwidgets::JS(js_color_fun), backgroundColor = 'black')

猜你喜欢

转载自blog.csdn.net/patrisk/article/details/78144288
今日推荐