DocumentTermMatrix завершается со странной ошибкой только тогда, когда # терминов › 3000

Мой код ниже работает нормально, если я не использую создание DocumentTermMatrix с более чем 3000 терминов. Эта строка:

movie_dict <- findFreqTerms(movie_dtm_train, 8)
movie_dtm_hiFq_train <- DocumentTermMatrix(movie_corpus_train, list(dictionary = movie_dict))

Не удается с:

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

Есть ли способ справиться с этим? Матрица 3000*60000 слишком велика для DocumentTermMatrix? Хотя это кажется довольно маленьким для классификации документов.

Полный фрагмент кода:

n1 <- 60000
n2 <- 70000
#******* loading the data ******************************************
#kaggle sentiment_analysis dataset    
movie_all <- read.delim('train.tsv', stringsAsFactors=FALSE)
movie_raw <- movie_all[1:(n2),]

#******* cleaning the corpus ***************************************
movie_corpus <- Corpus(VectorSource(movie_raw$Phrase))
movie_corpus_clean <- tm_map(movie_corpus, content_transformer(tolower))
movie_corpus_clean <- tm_map(movie_corpus_clean, removeNumbers)
movie_corpus_clean <- tm_map(movie_corpus_clean, removeWords, stopwords())
movie_corpus_clean <- tm_map(movie_corpus_clean, removePunctuation)
movie_corpus_clean <- tm_map(movie_corpus_clean, stripWhitespace)
movie_dtm <- DocumentTermMatrix(movie_corpus_clean)

#*********** break out data into train/test sets *******************
movie_train <- movie_raw[1:(n1),]
movie_corpus_train <- movie_corpus_clean[1:(n1)]
movie_dtm_train <- movie_dtm[1:(n1),]

#*********** remove rare words from document term matrix ***********
movie_dict <- findFreqTerms(movie_dtm_train, 8)
movie_dtm_hiFq_train <- DocumentTermMatrix(movie_corpus_train, list(dictionary = movie_dict))

Изменить Это не удается:

movie_dtm_hiFq_train <- DocumentTermMatrix(movie_corpus_train[1:60000], list(dictionary = movie_dict))

но это работает:

d1 <- DocumentTermMatrix(movie_corpus_train[1:30000], list(dictionary = movie_dict))
d2 <- DocumentTermMatrix(movie_corpus_train[30000:60000], list(dictionary = movie_dict))
movie_dtm_hiFq_train <- c(d1, d2)

что заставляет меня поверить, что это должно быть проблемой размера ..


person anthonybell    schedule 22.06.2014    source источник
comment
Некоторые люди сообщают, что эта ошибка связана с кодировкой документа: stackoverflow.com/questions/18504559/   -  person josliber♦    schedule 23.06.2014
comment
Благодарю. Я попробую сегодня вечером.   -  person anthonybell    schedule 23.06.2014
comment
Попробовал ваше предложение, которое не сработало. См. мое редактирование (если я вызываю функцию партиями, она работает).   -  person anthonybell    schedule 24.06.2014
comment
Я могу подтвердить, что вызов функции в пакетном режиме работает. Однако я также обнаружил, что исключение из функции всех параметров (например, StemWords=TRUE) позволило мне вызывать функцию для всего набора данных, а не разбивать его на части.   -  person timothyjgraham    schedule 23.10.2014