на самом деле я пытаюсь провести анализ настроений на основе данных Twitter, используя наивный алгоритм Байеса.
Я смотрю 2000 твитов.
После получения данных в R studio я разделяю и обрабатываю дату следующим образом:
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. После этого я хотел бы создать две DTM на основе терминов, которые встречаются в корпусе поезда не менее 50 раз. Вот эти термины: "получить" "пропустить" "день" "просто" "сейчас" "хочу" "хорошо" "поработать"
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 совсем не работает. ЦММ основан на условиях, выбранных выше, но числа счетчиков в самой матрице неверны.
Твитнуть нет. 1 из учебного корпуса гласит: «О, да, получится, годы, когда получишь оплату по счету». Подмножество DTM верное:
Твитнуть нет. 3 части тестового корпуса - это "огромный раскат грома только что так страшно". Подмножество DTM неверно:
В этих твитах нет «получить». Но есть «справедливость». Так что подсчет как-то правильный, но не в том столбце.
Я очень старался решить эту проблему, но на самом деле не знаю, что делать дальше. Мне кажется, что tm создает DTM на основе терминов конкретного корпуса, а словарь используется только для замены имени столбца без какой-либо функции.
Спасибо за вашу помощь!