实际上,我正在尝试使用朴素贝叶斯算法基于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,并且字典仅用于替换没有任何功能的列名称。
感谢您的帮助!
机器收益?大声笑 –