用R进行文本分析初探——以《红楼梦》为例

Posted 赵小赵儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用R进行文本分析初探——以《红楼梦》为例相关的知识,希望对你有一定的参考价值。

  刚刚接触R语言和文本分析,为了将二者结合,试着对《红楼梦》进行分析,首先对《红楼梦》进行分词处理,并统计词频,同时画出标签云。

  其实文本分析还可以分析其它很多东西,我的下一步打算分析新浪微博。现在先写一个小的分析,作为学习用。

文本分析是指对文本的表示及其特征项的选取;文本分析是文本挖掘、信息检索的一个基本问题,它把从文本中抽取出的特征词进行量化来表示文本信息。

一.需要加载的包

需要用到rJava,Rwordseg,wordcloud

安装步骤:

1.安装java:

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

2.安装rJava:

在R的命令框输入

install.packages("rJava")

错误解决方案:

错误1.错误: ‘rJava’程辑包或名字空间载入失败,
解决方案:换路径
技术分享

错误2.

技术分享

解决方案:

在R中输入

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

技术分享

3.安装Rwordseg:

下载地址:

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

技术分享点这儿下载Rwordseg

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

4.安装wordcloud

在R的命令框输入

install.packages("wordcloud")

 利用Rwordseg分词包进行分词

 二.分析过程

(一)基础导入

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

(二)读入数据

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

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

(三)优化词库

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

installDict("C:\\Users\\Administrator\\Desktop\\hongloumeng.scel","hongloumeng1")
installDict("C:\\Users\\Administrator\\Desktop\\红楼梦群成员名字词库.scel","hongloumeng2")
installDict("C:\\Users\\Administrator\\Desktop\\常用文言文词库.scel","wenyanwen")

(四)分词+统计词频

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个字的结果和词频小于100的结果

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

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

(八)词频结果输出

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

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

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

技术分享

(九)画出标签云

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配色如下,大家可以根据喜好选择:

技术分享

3.画出标签云

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

技术分享

所有代码:

Sys.setenv(JAVA_HOME=C:/Program Files/Java/jre1.8.0_73) 
library(rJava)
library(Rwordseg) 
  
#读入数据  
lecture<-read.csv("E:/Rtagcloud/hongloumeng.txt", stringsAsFactors=FALSE,header=FALSE)
# 查看前几行,看是否有字符编码问题  
head(lecture)
获取数据集长度  
n=length(lecture[,1]);  
print(n)  
#文本预处理  
res=lecture[]
#分词+频数统计  
installDict("C:\\Users\\Administrator\\Desktop\\hongloumeng.scel","hongloumeng1")
installDict("C:\\Users\\Administrator\\Desktop\\红楼梦群成员名字词库.scel","hongloumeng2")
installDict("C:\\Users\\Administrator\\Desktop\\常用文言文词库.scel","wenyanwen")
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)   

#画出标签云
library(RColorBrewer)
library(wordcloud)
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进行文本分析初探——以《红楼梦》为例的主要内容,如果未能解决你的问题,请参考以下文章

R语言对推特数据进行文本情感分析

Julia元编程初探——以简单符号求导为例

红楼梦词云分析

R语言应用实战-基于R的因子分析(以上市公司数据为例)

Python3红楼梦人名出现次数统计分析

Python文本分析初探:《人民的名义》知乎网友都关注什么?