文本挖掘—《三体》分词、词云展示

背景

在R语言中,对中文分词支持较好的包有两个,一个是RWordseg,一个是jiebaR,前者安装需要配置Java环境等繁琐操作,后者安装方便,感觉功能也更强大一些,本文就是用0.8版本的jiebaR进行分词等一系列操作,然后用wordcloud包来进行词云展示。

分词

加载package

library(jiebaRD)
library(jiebaR)

建立分词引擎

这是jiebaR相比较RWordseg而言非常好用的一点,它将添加用户词典和停用词库放在一条命令中,只需要添加相应的参数就可以了,用户词典的源文件在jiebaRD的目录下dict文件夹中,直接将词库复制进去即可,其中的停用词库也可以直接用,不需要自己下载了。除此之外,还有7种类型的引擎供选词,以及同时新建多个分词引擎等,具体用法可以参照jiebaR作者写的说明文档

# 建立分词引擎 添加stop_word停止词参数
mixseg = worker(stop_word = "stop_words.utf8")
#对文本进行分词
segwords <- segment("threebody.txt", mixseg)

文本读取与清洗

读取中文时要注意文本编码格式为UTF-8,否则读入R中就是一团乱麻,这里可能会有空行警告
,这个警告对读取没有什么影响,如果想要消除警告的话,可以打开你分析的文本在最后加空
行。

# 将分词后的文本读入R中
mytxt <- read.csv(file = segwords, head = F, stringsAsFactors = F, sep = "", encoding = "UTF-8")
# 将分词后的文本转换为向量
mytxtvector <- unlist(mytxt)

文本清洗就是去除一些无意义的词汇和符号等,这里可以自己根据分析的内容自行改动。

# 去掉不需要、无意义的字符
mytxtvector <- gsub("[0-9a-zA-Z]+?", "", mytxtvector)
mytxtvector <- gsub("\n", "", mytxtvector)
mytxtvector <- gsub(" ", "", mytxtvector)
# 去掉一个字的词
mytxtvector <- subset(mytxtvector, nchar(as.character(mytxtvector)) > 1)
# 统计词频 写入数据框中
myfreq <- table(unlist(mytxtvector))
myfreq <- rev(sort(myfreq))
myfreq <- data.frame(word = names(myfreq), freq = myfreq)
# 去掉只出现过一次的词
myfreq2 = subset(myfreq, myfreq$freq >= 2)

绘制词云

加载package

library(RColorBrewer)
library(wordcloud)

设置颜色、字体 画图

# 设置一个颜色系
mycolors <- brewer.pal(8, "Dark2")
# 设置字体
windowsFonts(myFont = windowsFont("微软雅黑"))
# 画出云图
wordcloud(myfreq2$word, myfreq2$freq, random.order = F, random.color = F, colors = mycolors, family = "myFont")

id

“没有”最多,其次是两位主人公的姓名,看来注定是悲剧收场了……

##参考文献
[1]jiebaR中文分词