用r做情绪识别时出现了问题,源代码如下:
library(rJava)
library(Rwordseg)
library(tm)
library(NLP)
setwd("d:\\第三次作业")#设置目录
comdata=read.csv("book.csv",header=T,stringsAsFactors=F)
comdata$情绪标识=as.factor(comdata$情绪标识)#输出变量转为因子型、
installDict('财经金融词汇大全.scel',dictname = 'finwords')
installDict('政治学词库大全.scel',dictname = 'finwords')#导入搜狗词库
com_dataTemp=gsub("[0-9#<>~a-z]","",comdata$评论)#删除字母和数字
com_dataseg=segmentCN(com_dataTemp)#分词
stopwords=read.csv("book.csv",stringsAsFactors=F)#去停词
removeStopWords=function(x,words)#逐行删除停用词函数
{
ret=character(0)#空变量,用于存储词汇
index=1#循环起始点
it_max=length(x)#测量一行词汇的数量
while(index<=it_max)
{#条件判断:如果不是停用词
if(length(words[words==x[index]])<1)
{#把该词记录下来
ret=c(ret,x[index])
}
index=index+1#下一个
}
return(ret)#返回非停用词
}
com_dataseg_clean=lapply(com_dataseg,removeStopWords,stopwords)#逐行调用函数removeStopWords
com_corpus=Corpus(VectorSource(com_dataseg_clean))
inspect(com_corpus[1:3])#生成语料库
com_dtm=DocumentTermMatrix(com_corpus,control = list(wordLengths=c(1,Inf)))#把语料库转换成词矩阵
set.seed(111)#设置随机数
train_index=which(comdata$class=="train")#获得训练集位置
com_raw_train<-comdata[train_index,]#原始数据训练集
com_raw_test<-comdata[train_index,]#原始数据测试集
com_dtm_train<-com_dtm[train_index,]
com_dtm_text<-com_dtm[train_index,]#分割词条文档矩阵
com_corpus_train<-com_corpus[train_index]
com_corpus_train<-com_corpus[train_index]#分割语料
com_dict<-findFreqTerms(com_dtm_train,2)
write.csv(com_dict,"com_dict.csv") # findFreqTerms函数查询超过一定频数的词条,例如查询出现两次以上的词条
com_dict.clean=read.csv("com_dict.csv",header=F,stringsAsFactors = F)
com_dict.clean=as.matrix(com_dict.clean)
com_dict.clean=as.vector(com_dict.clean)#对于词典进行人工干预,筛选感情词
com.dtm=DocumentTermMatrix(com_corpus)
com.dtm=as.matrix(com.dtm)
com.dtm.clean=com.dtm[,com_dict.clean]
com_train<-com.dtm.clean[train_index,]
倒数第二句无法运行,会得到以下回复:
Error in com.dtm[, com_dict.clean] : subscript out of bounds
这是为什么呢