Читать в большом текстовом файле (100 МБ) - PullRequest
0 голосов
/ 26 августа 2018

Я работаю над проектом добычи текста с R. Размер файла превышает 100 МБ. Мне удалось прочитать файл и выполнить некоторую обработку текста, однако, когда я дошел до точки удаления стоп-слов, RStudio раздавлен. Какое будет лучшее решение, пожалуйста?

Должен ли я разбить файл на 2 или 3 файла, обработать их, а затем объединить снова перед применением какой-либо аналитики? у кого есть код для разделения. Я перепробовал несколько доступных онлайн вариантов, но ни один из них не работает.

Вот код, который я использовал. Все работало без сбоев, кроме удаления стоп-слов

# Install
install.packages("tm")  # for text mining
install.packages("SnowballC") # for text stemming
install.packages("wordcloud") # word-cloud generator 
install.packages("RColorBrewer") # color palettes

# Load
library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")

library(readr)
doc <- read_csv(file.choose())

docs <- Corpus(VectorSource(doc))
docs

# Convert the text to lower case
docs <- tm_map(docs, content_transformer(tolower))

# Remove numbers
docs <- tm_map(docs, removeNumbers)

# Remove english common stopwords
docs <- tm_map(docs, removeWords, stopwords("english"))

1 Ответ

0 голосов
/ 26 августа 2018

Если у вас много слов в корпусе, 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 потерпит крах из-за слишком большого потребления памяти.

...