Как насчет этого:
library(tidytext) # library for text
library(dplyr)
# your data
text <- data.frame(id = c(11,12,13),
text=c("bad movie","good movie","I think it would benefit religious
people to see things like this, not just to learn about our home,
the Universe, in a fun and easy way, but also to understand that non- religious
explanations don't leave people hopeless and"), stringsAsFactors = FALSE) # here put this option, stringAsFactors = FALSE!
# the lexicon
nrc_lexicon <- get_sentiments("nrc")
# now the job
unnested <- text %>%
unnest_tokens(word, text) %>% # unnest the words
left_join(nrc_lexicon) %>% # join with the lexicon to have sentiments
left_join(text) # join with your data to have titles
Здесь вывод с id
, вы можете иметь его также с заголовками, но я не поставил его из-за длинного третьего заголовка, вы можете легко поставитьэто как unnested$text
вместо unnested$id
:
table_sentiment <- table(unnested$id, unnested$sentiment)
table_sentiment
anger anticipation disgust fear joy negative positive sadness surprise trust
11 1 0 1 1 0 1 0 1 0 0
12 0 1 0 0 1 0 1 0 1 1
13 0 1 0 1 1 2 3 2 1 0
И если вы хотите это как data.frame
:
df_sentiment <- as.data.frame.matrix(table_sentiment)
Теперь вы можете делать все, что хотите, напримерЕсли я хорошо помню, вы хотите двоичный вывод, если есть или не настроение:
df_sentiment[df_sentiment>1]<-1
df_sentiment
anger anticipation disgust fear joy negative positive sadness surprise trust
11 1 0 1 1 0 1 0 1 0 0
12 0 1 0 0 1 0 1 0 1 1
13 0 1 0 1 1 1 1 1 1 0