首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R tidytext情感分析-如何使用drop参数

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

Stack Overflow用户
提问于 2021-07-11 17:07:44
回答 1查看 65关注 0票数 1

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

下面的函数接受一个数据框架,并给出一个新的数据框架,其中包含了积极的和消极的词汇以及情感。

输入(故意用荷兰语写一篇文章,这样就不能得分)

代码语言:javascript
复制
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)

作为输出,我需要的是:

代码语言:javascript
复制
sentiment     positive     negative
0             0            0
2             2            0
-2            0            2

但是我的功能给了我别的东西:

代码语言:javascript
复制
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)
  
}

这仍然返回一个数据帧,其中未加分数的文本丢失。如您所见,省略了第一个文本:

代码语言:javascript
复制
sentiment     positive     negative
2             2            0
-2            0            2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 13:00:39

如果在联接后没有返回任何行,则可以返回包含所有0值的tibble。我们可以使用一个if条件来检查这一点。

在句子中只有正反两种情绪的情况下,complete会创建另一行,并将其赋值为0。spread也被pivot_wider取代了,因为spread现在被取代了。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68338367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档