2017-04-10 38 views
2

实际上,我正在尝试使用朴素贝叶斯算法基于twitter数据进行情感分析。DocumentTermMatrix使用字典时计数错误

我看看2000年的推文。

获取数据为R的工作室后,我分开,预处理日期如下:

train_size = floor(0.75 * nrow(Tweets_Model_Input)) 
set.seed(123) 
train_sub = sample(seq_len(nrow(Tweets_Model_Input)), size = train_size) 

Tweets_Model_Input_Train = Tweets_Model_Input[train_sub, ] 
Tweets_Model_Input_Test = Tweets_Model_Input[-train_sub, ] 

myCorpus = Corpus(VectorSource(Tweets_Model_Input_Train$SentimentText)) 
myCorpus <- tm_map(myCorpus, removeWords, stopwords("english")) #removes common prepositions and conjunctions 
myCorpus <- tm_map(myCorpus, stripWhitespace) 
removeURL <- function(x) gsub("http[^[:space:]]*", "", x) 
myCorpus <- tm_map(myCorpus, removeURL) 
removeRetweet <- function(x) gsub("(RT|via)((?:\\b\\W*@\\w+)+)", "", x) 
myCorpus <- tm_map(myCorpus, removeRetweet) 
myCorpus <- tm_map(myCorpus, removeNumbers) 
myCorpus <- tm_map(myCorpus, removePunctuation) 
myCorpus <- tm_map(myCorpus, content_transformer(tolower)) 
myCorpus <- tm_map(myCorpus, PlainTextDocument) 
myCorpus.train <- tm_map(myCorpus, stemDocument, language = "english") 
myCorpus.train <- Corpus(VectorSource(myCorpus.train$content)) 


myCorpus = Corpus(VectorSource(Tweets_Model_Input_Test$SentimentText)) 
myCorpus <- tm_map(myCorpus, removeWords, stopwords("english")) #removes common prepositions and conjunctions 
myCorpus <- tm_map(myCorpus, stripWhitespace) 
removeURL <- function(x) gsub("http[^[:space:]]*", "", x) 
myCorpus <- tm_map(myCorpus, removeURL) 
removeRetweet <- function(x) gsub("(RT|via)((?:\\b\\W*@\\w+)+)", "", x) 
myCorpus <- tm_map(myCorpus, removeRetweet) 
myCorpus <- tm_map(myCorpus, removeNumbers) 
myCorpus <- tm_map(myCorpus, removePunctuation) 
myCorpus <- tm_map(myCorpus, content_transformer(tolower)) 
myCorpus <- tm_map(myCorpus, PlainTextDocument) 
myCorpus.test <- tm_map(myCorpus, stemDocument, language = "english") 
myCorpus.test <- Corpus(VectorSource(myCorpus.test$content)) 

所以我得到了我的NB算法火车和测试语料。做完这些之后,我想根据列车语料库中出现至少50次的术语创建两个DTM。这些条件是:“获得”,“思念”,“天”,“公正”“现在”“希望”“好”,“工作”

fivefreq = findFreqTerms(dtm.train, lowfreq = 50, highfreq = Inf) 
length((fivefreq)) 

dtm.train <- DocumentTermMatrix(myCorpus.train, control=list(dictionary = fivefreq)) 
dtm.test <- DocumentTermMatrix(myCorpus.test, control=list(dictionary = fivefreq)) 

对于dtm.train它工作得很好,但对于dtm.test它根本不起作用。 DTM基于上面选择的术语,但矩阵本身的计数数字不正确。

Tweet no。训练语料库中的1个是“omg celli发生yearswtf gota get bill paid”。在DTM的子集是正确的:

DTM Tweet 1 Training Data

分享Tweet没有。测试语料库中的3个是“巨大的滚雷”。在DTM的子集是不正确的:

DTM Tweet 3 Training Data

没有“得到”在鸣叫。但是有一个“公正”。所以计数是正确的,但在错误的列。

我尽力解决这个问题,但实际上我不知道别的事情要做。对我来说,tm似乎是根据特定语料库的条款创建DTM,并且字典仅用于替换没有任何功能的列名称。

感谢您的帮助!

回答

0

编辑:这一个实际的错误。使用VCorpus()而不是语料库()也将解决该问题。

这似乎是一个实际的错误。尝试恢复到版本0.6-2。这解决了我的问题。

+0

机器收益?大声笑 –