应用于整个专栏的情绪分析

r sentiment analysis applied to a whole column

我有一个推文数据框。给定的推文有多个句子。当我使用 sentimentr 的情绪函数时,它 returns 每个函数的分数如下:

sentiment(as.character(tweets$text[1]))$sentiment
>>> [1] 0.2474874 0.0000000

但是如果我想要对整条推文进行单一评分,我可以通过取平均分来实现这一效果

mean(sentiment(as.character(tweets$text[1]))$sentiment)
>>>[1] 0.1237437

所以,我想我可以将同样的逻辑应用于整个数据帧

tweets$sentiment <- mean(sentiment(as.character((tweets$text)))$sentiment)

但是...这 returns 所有推文的值相同。如果我放下 mean(),我会得到 NULL,因为有太多 sentences/scores 需要解压。

如何为数据框的每一行分配一个值?

我们可以使用 sapplysentiment 函数单独应用于每个 text

library(sentimentr)

tweets$text <- as.character(tweets$text)
tweets$sentiment_score <- sapply(tweets$text, function(x) 
                             mean(sentiment(x)$sentiment))

如果您更喜欢 sentimentr/tidy 方式,可以执行以下操作。 get_sentences() 将每条推文拆分成句子。然后,您使用 sentiment_by()。在这里,我使用 id 作为分组变量并获得每条推文的平均情绪分数。

library(magrittr)
library(dplyr)

mytweets <- tibble(id = 1:3,
                   mytext = c("do you like it?  But I hate really bad dogs",
                              "I think the sentimentr package is great. But I need to learn how to use it",
                              "Do you like data science? I do!"))

mutate(mytweets,
      sentence_split = get_sentences(mytext)) %$%
sentiment_by(sentence_split, list(id))

   id word_count        sd ave_sentiment
1:  1         10 1.4974654    -0.8088680
2:  2         16 0.2906334     0.3944911
3:  3          7 0.1581139     0.1220192