R - 使用 syuzhet 包在每个 NRC 情绪和情绪中查找热门词

R - Finding top words in each NRC sentiment and emotion using syuzhet package

数据集快照:

我得到以下图表:

代码如下:

library(tidytext)
library(syuzhet)

lyrics$lyric <- as.character(lyrics$lyric)

tidy_lyrics <- lyrics %>% 
  unnest_tokens(word,lyric)

song_wrd_count <- tidy_lyrics %>% count(track_title)

lyric_counts <- tidy_lyrics %>%
  left_join(song_wrd_count, by = "track_title") %>% 
  rename(total_words=n)

lyric_sentiment <- tidy_lyrics %>% 
  inner_join(get_sentiments("nrc"),by="word")

lyric_sentiment %>% 
count(word,sentiment,sort=TRUE) %>%
group_by(sentiment)%>%top_n(n=10) %>% 
ungroup() %>%
  ggplot(aes(x=reorder(word,n),y=n,fill=sentiment)) + 
  geom_col(show.legend = FALSE) + 
  facet_wrap(~sentiment,scales="free") + 
  coord_flip()

问题是我不确定得到的结果是否正确。例如,您可以看到 'bad' 是多种情绪的一部分。此外,如果我们检查 lyric_sentiment,我们会看到单词 'shame' 在 'Tim McGraw' 中出现了四次。实际上它在这首歌中只出现了两次。

正确的做法是什么?

你做得对。 nrc 情感可以在多个情感部分中放置单词。您可以在以下示例中看到这一点。您还可以在 nrc homepage

上查找值
library(dplyr)
library(tidytext)

nrc <- get_sentiments("nrc")
nrc %>% filter(word %in% c("bad", "shame"))
# A tibble: 9 x 2
  word  sentiment
  <chr> <chr>    
1 bad   anger    
2 bad   disgust  
3 bad   fear     
4 bad   negative 
5 bad   sadness  
6 shame disgust  
7 shame fear     
8 shame negative 
9 shame sadness