红楼梦文本分析-R语言

时间:2022-06-05 16:56:38

(一)需要加载的包

需要用到rJava,Rwordseg,wordcloud

安装步骤:

1.安装java:

http://www.java.com/zh_CN/download/windows_xpi.jsp

2.安装rJava:

在R的命令框输入

install.packages("rJava")

错误解决方案:

错误1.错误: ‘rJava’程辑包或名字空间载入失败,
解决方案:换路径
红楼梦文本分析-R语言

错误2.

红楼梦文本分析-R语言

解决方案:

在R中输入

Sys.setenv(JAVA_HOME='C:/Program Files/Java/jre1.8.0_73')  #注意:要根据你的java路径更改

红楼梦文本分析-R语言

3.安装Rwordseg:

下载地址:

https://r-forge.r-project.org/R/?group_id=1054

红楼梦文本分析-R语言点这儿下载Rwordseg

解压后将文件放入R下library文件夹下

4.安装wordcloud

在R的命令框输入

install.packages("wordcloud")

 利用Rwordseg分词包进行分词

(二)分析过程

1.基础导入

library(rJava)
library(Rwordseg)
library(RColorBrewer)
library(wordcloud)

2.读入数据

  将需要分析的文本放入记事本中,保存到相应路径,并在R中打开。这儿我导入的是《红楼梦》的文本。

lecture<-read.csv("E:/Rtagcloud/hongloumeng.txt", stringsAsFactors=FALSE,header=FALSE)

3.优化词库

  对于文言文和人物名字分词结果不是很理想的问题,有一个很好的解决方案,就是导入搜狗细胞词库(http://pinyin.sogou.com/dict/),以本例作为例子,分别导入了文言文常用词库、红楼梦常用词库、红楼梦成员名字词库,这三个词库,让分词效果更为理想。

installDict("C:\\Users\\Administrator\\Desktop\\红楼梦词汇大全.scel","hongloumeng1")
installDict(
"C:\\Users\\Administrator\\Desktop\\红楼梦群成员名字词库.scel","hongloumeng2")
installDict(
"C:\\Users\\Administrator\\Desktop\\红楼梦词汇.scel","hongloumeng3")

为了让大家更直观的理解优化词库,举如下例子:

先导入rJava和Rwordseg两个包

library(rJava)
library(Rwordseg)

利用Rwordseg对“朝辞白帝彩云间,千里江陵一日还。两岸猿声啼不尽,轻舟已过万重山。”进行分词,结果如下
红楼梦文本分析-R语言

接着到http://pinyin.sogou.com/dict/detail/index/22394 下载李白诗集的细胞词库,并把它放到E盘,在R中输入以下代码安装词典:

installDict("e:/李白诗集.scel","libai")

安装好后,输入同样的代码,结果如下
红楼梦文本分析-R语言

可见利用细胞词库可以得到更好的分词结果。

4.分词+统计词频

红楼梦文本分析-R语言
words=unlist(lapply(X=res, FUN=segmentCN))
#unlist将list类型的数据,转化为vector
#
lapply()返回一个长度与X一致的列表,每个元素为FUN计算出的结果,且分别对应到X中的每个元素。
word=lapply(X=words, FUN=strsplit, " ")
v
=table(unlist(word))
#table统计数据的频数
红楼梦文本分析-R语言

结果v的部分截图如下,可以看出此时已经统计好词频了:

红楼梦文本分析-R语言

5.对词频进行排序

# 降序排序  
v=rev(sort(v))

6.创建数据框

d=data.frame(词汇=names(v), 词频=v) 

7.过滤掉1个字的结果和词频小于100的结果

  筛选标准大家可以根据自己的需求进行修改

d=subset(d, nchar(as.character(d$词汇))>1 & d$词频>=100)  

8.词频结果输出

  根据自己的具体需求改变路径和文件名称

write.csv(d, file="E:/Rtagcloud/hongloumengfcresult.csv", row.names=FALSE)

词频统计结果(节选)如下:

红楼梦文本分析-R语言

9.画出标签云

(1)读入词频统计数据

路径和文件名称根据自己的需求更改

mydata<-read.csv("E:/Rtagcloud/hongloumengfcresult.csv",head=TRUE)

(2)设置字体类型和字体颜色

mycolors <- brewer.pal(12,"Paired")
windowsFonts(myFont
=windowsFont("锐字巅峰粗黑简1.0"))

字体下载地址:

http://www.zhaozi.cn/

大家可以根据自己的喜好选择喜欢的字体

brewer.pal配色如下,大家可以根据喜好选择:

红楼梦文本分析-R语言

(3)画出标签云

wordcloud(mydata$词汇,mydata$词频,random.order=FALSE,random.color=TRUE,colors=mycolors,family="myFont")

红楼梦文本分析-R语言

红楼梦文本分析-R语言

所有代码:

红楼梦文本分析-R语言
library(rJava)
library(Rwordseg)
library(RColorBrewer)
library(wordcloud)
#读入数据
lecture
<-read.csv("E:/Rtagcloud/hongloumeng.txt", stringsAsFactors=FALSE,header=FALSE)
#文本预处理
res
=lecture[]
#分词
+频数统计
installDict(
"E:\\红楼梦词汇大全.scel","hongloumeng1")
installDict(
"E:\\红楼梦群成员名字词库.scel","hongloumeng2")
installDict(
"E:\\红楼梦词汇.scel","hongloumeng3")
words
=unlist(lapply(X=res, FUN=segmentCN))
#unlist将list类型的数据,转化为vector
#lapply()返回一个长度与X一致的列表,每个元素为FUN计算出的结果,且分别对应到X中的每个元素。
word
=lapply(X=words, FUN=strsplit, " ")
v
=table(unlist(word))
#table统计数据的频数
# 降序排序
v
=rev(sort(v))

d
=data.frame(词汇=names(v), 词频=v) #创建数据框
#过滤掉1个字和词频小于200的记录
d
=subset(d, nchar(as.character(d$词汇))>1 & d$词频>=100)

#输出结果
write.csv(d, file
="E:/Rtagcloud/hongloumengfcresult.csv", row.names=FALSE)

#画出标签云
mydata
<-read.csv("E:/Rtagcloud/hongloumengfcresult.csv",head=TRUE)
mycolors
<- brewer.pal(12,"Paired")
windowsFonts(myFont
=windowsFont("锐字巅峰粗黑简1.0"))
wordcloud(mydata$词汇,mydata$词频,random.order
=FALSE,random.color=TRUE,colors=mycolors,family="myFont")
红楼梦文本分析-R语言