R: tidytext: sentiment comparing the three sentiment dictionaries
Jump to navigation
Jump to search
# Ref: https://github.com/dgrtwo/tidy-text-mining/blob/master/02-sentiment-analysis.Rmd
library(knitr) opts_chunk$set(message = FALSE, warning = FALSE, cache = TRUE) options(width = 100, dplyr.width = 100) library(ggplot2) theme_set(theme_light())
library(tidytext) get_sentiments("afinn") get_sentiments("bing") get_sentiments("nrc")
pride_prejudice <- tidy_books %>% filter(book == "Pride & Prejudice") pride_prejudice
# use `inner_join()` to calculate the sentiment in different ways. afinn <- pride_prejudice %>% inner_join(get_sentiments("afinn")) %>% group_by(index = linenumber %/% 80) %>% summarise(sentiment = sum(value)) %>% mutate(method = "AFINN") bing_and_nrc <- bind_rows(pride_prejudice %>% inner_join(get_sentiments("bing")) %>% mutate(method = "Bing et al."), pride_prejudice %>% inner_join(get_sentiments("nrc") %>% filter(sentiment %in% c("positive", "negative"))) %>% mutate(method = "NRC")) %>% count(method, index = linenumber %/% 80, sentiment) %>% spread(sentiment, n, fill = 0) %>% mutate(sentiment = positive - negative)
afinn <- pride_prejudice %>% inner_join(afinn) %>% group_by(index = linenumber %/% 80) %>% summarise(sentiment = sum(value)) %>% mutate(method = "AFINN") bing_and_nrc <- bind_rows(pride_prejudice %>% inner_join(get_sentiments("bing")) %>% mutate(method = "Bing et al."), pride_prejudice %>% inner_join(get_sentiments("nrc") %>% filter(sentiment %in% c("positive", "negative"))) %>% mutate(method = "NRC")) %>% count(method, index = linenumber %/% 80, sentiment) %>% spread(sentiment, n, fill = 0) %>% mutate(sentiment = positive - negative)
# plot bind_rows(afinn, bing_and_nrc) %>% ggplot(aes(index, sentiment, fill = method)) + geom_col(show.legend = FALSE) + facet_wrap(~method, ncol = 1, scales = "free_y")
# count get_sentiments("nrc") %>% filter(sentiment %in% c("positive", "negative")) %>% count(sentiment) get_sentiments("bing") %>% count(sentiment)
nrc %>% filter(sentiment %in% c("positive", "negative")) %>% count(sentiment) get_sentiments("bing") %>% count(sentiment)