Анализ настроений применяется ко всему столбцу - PullRequest
0 голосов
/ 10 марта 2020

У меня есть датафрейт твитов. В данном твите есть несколько предложений. Когда я использую функцию сентиментального настроения, она возвращает оценку для каждой функции, например, так:

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

Но если я хочу получить один балл за весь твит, я могу ~ выполнить sh этот эффект, взяв средняя оценка

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

Итак, я решил, что могу применить этот же лог c ко всему фрейму данных

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

Но ... это возвращает одинаковое значение для всех твитов. И если я уроню mean(), я получу NULL, так как слишком много предложений / оценок для распаковки.

Как я могу получить одно значение, назначенное каждой строке моего кадра данных?

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Если вы предпочитаете сентиментальный / аккуратный способ, вы можете сделать следующее. 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
2 голосов
/ 10 марта 2020

Мы можем использовать sapply, чтобы применить sentiment функцию к каждому text индивидуально.

library(sentimentr)

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