R tidytext情绪分析-如何使用drop参数



我最近问了一个关于情绪分析后遗漏的条目的问题。我分析的推文并不总是包含词典中的单词。我想知道哪些是不能翻译的。因此,即使零单词得分,我也愿意保留这些单词。在我之前的问题中,drop参数是作为一个解决方案给出的。然而,我想我可能做错了或者错过了什么。这是我第一次使用这些技术。

下面的函数获取一个数据帧,并给出一个新的数据帧作为回报,其中包含积极和消极单词的数量以及情绪。

输入(故意用荷兰语输入一个文本,因此无法评分(

id <- c(1, 2, 3)
date <- c("12-05-2021", "12-06-2021", "12-07-2021")
text <- c("Dit is tekst in het Nederlands", "I,m so happy that websites like this exsist", "This icecream tastes terrible. It made me upset")
df <- data.frame(id, date, text)

我想要的输出是:

sentiment     positive     negative
0             0            0
2             2            0
-2            0            2

但我的功能给了我其他东西:

sentimentAnalysis <- function(tweetData){

sentimentDataframe <- data.frame()

for(row in 1:nrow(tweetData)){

tekst <- as.character(tweetData[row, "text"])

positive <- 0
negative <- 0

tokens <- tibble(text = tekst) %>% unnest_tokens(word, text, drop = FALSE)

sentiment <- tokens %>%
inner_join(get_sentiments("bing")) %>% 
count(sentiment) %>% 
spread(sentiment, n, fill = 0) %>% 
mutate(sentiment = positive - negative)


sentimentDataframe <- bind_rows(sentimentDataframe, sentiment)
}

sentimentDataframe[is.na(sentimentDataframe)] <- 0
return(sentimentDataframe)

}

这仍然会返回一个缺少未分级文本的数据帧。正如您所看到的,第一个文本被省略了:

sentiment     positive     negative
2             2            0
-2            0            2

如果联接后没有返回行,则可以返回一个包含所有0值的tibble。我们可以使用if条件对此进行检查。

在句子中只有积极或消极情绪的情况下,complete会创建另一个具有相反情绪的行,并为其赋值0。也用pivot_wider代替了spread,因为spread现在被取代了。

library(tidyverse)
library(tidytext)
map_df(df$text, ~{
tibble(text = .x) %>% 
unnest_tokens(word, text, drop = FALSE) %>%
inner_join(get_sentiments("bing")) -> tmp
if(nrow(tmp) == 0) tibble(sentiment = 0, positive = 0, negative = 0)
else {
tmp %>%
count(sentiment) %>% 
complete(sentiment = c('positive', 'negative'), fill = list(n = 0)) %>%
pivot_wider(names_from = sentiment, values_from = n, values_fill = 0) %>% 
mutate(sentiment = positive - negative)
}
}) -> res
res
#  sentiment positive negative
#      <dbl>    <dbl>    <dbl>
#1         0        0        0
#2         2        2        0
#3        -2        0        2

最新更新