DocumentTermMatrix неверный подсчет при использовании словаря

на самом деле я пытаюсь провести анализ настроений на основе данных 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 верное:

DTM Tweet 1 тренировочные данные

Твитнуть нет. 3 части тестового корпуса - это "огромный раскат грома только что так страшно". Подмножество DTM неверно:

DTM Tweet 3 Training Data

В этих твитах нет «получить». Но есть «справедливость». Так что подсчет как-то правильный, но не в том столбце.

Я очень старался решить эту проблему, но на самом деле не знаю, что делать дальше. Мне кажется, что tm создает DTM на основе терминов конкретного корпуса, а словарь используется только для замены имени столбца без какой-либо функции.

Спасибо за вашу помощь!


person anno    schedule 10.04.2017    source источник


Ответы (1)


Изменить: это настоящая ошибка. Использование VCorpus () вместо Corpus () также решит проблему.

Кажется, это настоящая ошибка. Попробуйте вернуться к версии 0.6-2. Это устранило проблему для меня.

person MachineEarning    schedule 13.06.2017
comment
Машинный заработок? Ржу не могу - person Madhu Sareen; 13.06.2017