Для проекта я пытаюсь понять настроение различных новостных статей. Я пытаюсь сделать это с помощью пакета sentimentr
. Однако, поскольку у меня есть довольно много статей, я пытаюсь ускорить это, используя многоядерные процессоры. Текущий код выглядит следующим образом:
library(sentimentr)
#Extract sentences
df_sentences <- text1 %>%
select(content) %>%
get_sentences()
#Get sentiment score
df_sentences2 <- text1 %>%
select(content) %>%
lapply(get_sentences())
Text1 - это информационный фрейм, который содержит статьи и информацию об этих статьях, столбец content
- это столбец с фактическим текстом статьи. Я посмотрел онлайн и нашел пакет parallel
, который должен позволить вам сделать это. Я попытался реализовать этот пакет, используя приведенный ниже код, к сожалению, он, похоже, не использует больше ядер, поскольку скорость остается неизменной.
library(sentimentr)
library(parallel)
cl <- makeCluster(detectCores() - 1)
clusterEvalQ(cl, library(sentimentr))
clusterExport(cl, "text1")
df_sentences2 <- text1 %>% select(content) %>% parLapply(cl, ., get_sentences)
df_sentiment <- df_sentences2 %>%
parSapply(cl, ., sentiment_by)
stopCluster(cl)
Я надеюсь, что кто-то может помочь мне и сказать, правильно ли я это делаю или что мне нужно изменить, чтобы он работал правильно, поскольку это могло бы сэкономить мне много времени. Вся помощь очень ценится! Пример данных приведен ниже:
structure(list(X = 0:4, id = 17284:17288, title = c("Example Title",
"Example Title", "Example Title", "Example Title", "Example Title"
), publication = c("New York Times", "New York Times", "New York Times",
"New York Times", "New York Times"), author = c("Example Writer",
"Example Writer", "Example Writer", "Example Writer", "Example Writer"
), date = c("2016-12-31", "2015-12-31", "2014-12-31", "2013-12-31",
"2012-12-31"), year = c(2016, 2016, 2016, 2016, 2016), month = c(12,
12, 12, 12, 12), url = c(NA, NA, NA, NA, NA), content = c("This is an example sentence. This is another example sentence",
"This is an example sentence. This is another example sentence",
"This is an example sentence. This is another example sentence",
"This is an example sentence. This is another example sentence",
"This is an example sentence. This is another example sentence"
)), .Names = c("X", "id", "title", "publication", "author", "date",
"year", "month", "url", "content"), class = "data.frame", row.names = c(NA,
-5L))
Изменить:
Я изменил исходный код, включив в него комментарий, сделанный @ F.Privé, к следующему: время, необходимое для выполнения операции, остается неизменным. Я надеюсь, что кто-то знает, что мне нужно изменить, чтобы заставить его работать должным образом.
library(sentimentr)
library(parallel)
cl <- makeCluster(detectCores() - 1)
clusterEvalQ(cl, library(sentimentr))
clusterExport(cl, "text1")
df_sentences <- text1 %>%
pull(content) %>%
parLapply(cl, ., get_sentences)
df_sentiment <- df_sentences2 %>%
parLapply(cl, ., sentiment_by)
stopCluster(cl)