Переверните список в R, проведите анализ, специфичный для элемента в списке, сохраните результаты в элементе данных. - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь повторить анализ, используя tidytext в R, за исключением использования цикла. Конкретный пример взят из работы Джулии Силдж и Дэвида Робинсона по разработке текста с использованием R, Tidy Approach. Контекст для этого можно найти здесь: https://www.tidytextmining.com/sentiment.html#sentiment-analysis-with-inner-join.

В тексте они дают пример того, как проводить анализ настроений с помощью словаря NRC, который имеет восемь различных чувств, включая радость, гнев и ожидание. ,Я не делаю анализ для конкретной книги, как пример, поэтому я закомментировал эту строку, и она все еще работает:

nrc_list <- get_sentiments("nrc") %>% 
  filter(sentiment == "joy")

wordcount_joy <- wordcount %>%
# filter(book == "Emma") %>%
  inner_join(nrc_list) %>%
  count(word, sort = TRUE)

Как я уже говорил, это работает. Теперь я хочу изменить его так, чтобы он охватывал все восемь эмоций и сохранял результаты в кадре данных, помеченном эмоцией. Как я пытался его изменить:

emotion <- c('anger', 'disgust', 'joy', 'surprise', 'anticip', 'fear', 'sadness', 'trust')

for (i in emotion) {

nrc_list <- get_sentiments("nrc") %>% 
  filter(sentiment == "i")

wcount[[i]] <- wordcount  %>%
  inner_join(nrc_list) %>%
  count(word, sort = TRUE)

}

Когда я это делаю, я получаю сообщение «Ошибка: объект« wcount »не найден». Я гуглил это, и похоже, что ответами на этот вопрос является использование wcount [[i]], но, очевидно, что-то не так, когда я пытался его адаптировать. Есть ли у вас какие-либо предложения?

1 Ответ

0 голосов
/ 04 ноября 2019

Код ниже поможет. Обратите внимание, что вы ссылаетесь на wordcount в вашем цикле, и в этом примере используются tidybooks. Код следует за шагами как в ссылке на tidytextmining, к которому Вы обращаетесь.

library(janeaustenr)
library(dplyr)
library(stringr)
library(tidytext)

tidy_books <- austen_books() %>%
  group_by(book) %>%
  mutate(linenumber = row_number(),
         chapter = cumsum(str_detect(text, regex("^chapter [\\divxlc]", 
                                                 ignore_case = TRUE)))) %>%
  ungroup() %>%
  unnest_tokens(word, text)

emotion <- c('anger', 'disgust', 'joy', 'surprise', 'anticip', 'fear', 'sadness', 'trust')
# initialize list with the length of the emotion vector
wcount <- vector("list", length(emotion))
# name the list entries
names(wcount) <- emotion

# run loop
for (i in emotion) {
  nrc_list <- get_sentiments("nrc") %>% 
    filter(sentiment == i)

  wcount[[i]] <- tidy_books  %>%
    inner_join(nrc_list) %>%
    count(word, sort = TRUE)
}
...