应用于整个专栏的情绪分析
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 需要解压。
如何为数据框的每一行分配一个值?
我们可以使用 sapply
将 sentiment
函数单独应用于每个 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
我有一个推文数据框。给定的推文有多个句子。当我使用 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 需要解压。
如何为数据框的每一行分配一个值?
我们可以使用 sapply
将 sentiment
函数单独应用于每个 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