TermDocumentMatrix иногда выдает ошибку

Я создаю Облако слов на основе твитов из разных спортивных команд. Этот код успешно выполняется примерно 1 из 10:

handle <- 'arsenal'
txt <- searchTwitter(handle,n=1000,lang='en')
t <- sapply(txt,function(x) x$getText())
t <- gsub('http.*\\s*|RT|Retweet','',t)
t <- gsub(handle,'',t)
t_c <- Corpus(VectorSource(t))
tdm = TermDocumentMatrix(t_c,control = list(removePunctuation = TRUE,stopwords = stopwords("english"),removeNumbers = TRUE, content_transformer(tolower)))
m = as.matrix(tdm)
word_freqs = sort(rowSums(m), decreasing=TRUE) 
dm = data.frame(word=names(word_freqs), freq=word_freqs)
wordcloud(dm$word, dm$freq, random.order=FALSE, colors=brewer.pal(8, "Dark2"),rot.per=0.5)

Остальные 9 из 10 раз выдают следующую ошибку:

Error in simple_triplet_matrix(i = i, j = j, v = as.numeric(v), nrow = length(allTerms),  : 
  'i, j, v' different lengths
In addition: Warning messages:
1: In mclapply(unname(content(x)), termFreq, control) :
  all scheduled cores encountered errors in user code
2: In simple_triplet_matrix(i = i, j = j, v = as.numeric(v), nrow = length(allTerms),  :
  NAs introduced by coercion

Есть идеи, ребята? Я гуглил, но пока не дотянул! Имейте в виду, что я абсолютный новичок в R!

3 ответа

Решение

Итак, после небольшой игры, следующая строка кода полностью устранила мою проблему:

t <- iconv(t,to="utf-8-mac")

Я предполагаю, что вы использовали следующую строку кода где-то перед использованием команды DocumentTermMatrix.

corpus = tm_map(corpus, PlainTextDocument)

Эта строка кода преобразует весь текст в корпусе в PlainTextDocument, для которого функция DocumentTermMatrix не работает должным образом.

Просто повторите весь процесс создания корпуса и его предварительной обработки, пропустив указанную выше команду, и все будет хорошо.

Если вы удалите:

corpus = tm_map(corpus, PlainTextDocument)

Вы также должны удалить:

t_c <- Corpus(VectorSource(t))

Тогда вы получите правильный вывод для TermDocumentMatrix,

Другие вопросы по тегам