2017-04-10 167 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

機器收益?大聲笑 –