實際上,我正在嘗試使用樸素貝葉斯算法基於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的子集是正確的:
分享Tweet沒有。測試語料庫中的3個是「巨大的滾雷」。在DTM的子集是不正確的:
沒有「得到」在鳴叫。但是有一個「公正」。所以計數是正確的,但在錯誤的列。
我盡力解決這個問題,但實際上我不知道別的事情要做。對我來說,tm似乎是根據特定語料庫的條款創建DTM,並且字典僅用於替換沒有任何功能的列名稱。
感謝您的幫助!
機器收益?大聲笑 –