用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进行文本分析初探——以《红楼梦》为例的主要内容,如果未能解决你的问题,请参考以下文章