Если у вас много слов в корпусе, R будет долго удалять стоп-слова. tm removeWords - это гигантский gsub, который работает следующим образом:
gsub(sprintf("(*UCP)\\b(%s)\\b", paste(sort(words, decreasing = TRUE),
collapse = "|")), "", x, perl = TRUE)
Поскольку каждое слово (x) в корпусе проверяется на стоп-словах, а файл объемом 100 МБ содержит много слов, Rstudio может аварийно завершить работу, так как некоторое время не получает ответ от R. Я не уверен, есть ли где-то время ожидания, встроенное в RStudio.
Теперь вы можете запустить этот код в консоли R; это не должно привести к сбою, но вы можете долго ждать. Вы можете использовать пакет beepr
для создания звука после завершения процесса.
Если возможно, я бы посоветовал перейти на пакет quanteda
, поскольку он будет работать параллельно из коробки, лучше документирован, поддерживается и имеет меньше проблем с utf-8 по сравнению с tm. По крайней мере, это мой опыт.
Но вы также можете попробовать запустить ваш код tm параллельно, как показано ниже, и посмотреть, работает ли он немного лучше:
library(tm)
# your code reading in files
library(parallel)
cores <- detectCores()
# use cores-1 if you want to do anything while the code is running.
cl <- makeCluster(cores)
tm_parLapply_engine(cl)
docs <- Corpus(VectorSource(doc))
# Convert the text to lower case, remove numbers and stopwords
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeNumbers)
docs <- tm_map(docs, removeWords, stopwords("english"))
# rest of tm code if needed
tm_parLapply_engine(NULL)
stopCluster(cl)
Если вы собираетесь выполнять вычисления для большой матрицы терминов документа, которую вы получите с большим количеством слов, убедитесь, что вы используете функции из пакета slam
(установленного при установке tm). Эти функции поддерживают матрицу терминов документа в разреженной форме. В противном случае ваша матрица терминов документа может быть преобразована в плотную матрицу, и ваш сеанс R потерпит крах из-за слишком большого потребления памяти.