You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中使用Vader Sentiment Analysis批量处理推特的结果获取问题

问题

使用Vader Sentiment Analysis分析3000条推特时,单条分析能得到完整评分,但循环处理时仅能获取每条推特的compound综合评分,希望通过循环获取每条推特的完整评分结果(如单条分析的输出格式)。

样本数据

dput(data_sample$text)
c("Need DoorDash or Uber method asap😭 cause I be starving😭😭", 
"I’m such a real ahh niqq cuz I be having myself weak asl😂", 
"This shii made me laugh so fuccin hard bro😂😂😂😂", 
"Kevin Hart and Will Ferrell made a Gem in Get hard fr😂😂😂", 
"@_big_emmy @NigerianAmazon Chill🤣😭", "Ts so bomedy 😂😂😂", 
"So is that ass Gotdam😂😂😂", 
"This wild😂😂😂", "Idc them late night DoorDash’s be goin crazy🤣", 
"Video of the week😂😂😂😂")

单条分析代码

get_vader(data_sample$text[1])

期望输出格式

word_scores                            compound                                 pos 
"{0, 0, 0, 0, 0, 0, 0, 0, 0, -1.8}"                            "-0.421"                                 "0" 
                                neu                                 neg                           but_count 
                            "0.763"                             "0.237"                                 "0" 

当前循环代码及结果

当前循环仅返回compound评分:

for (i in 1:length(data_sample$text)){
  Loop_Error <- F
  tryCatch({ 
    get_vader(data_sample$text[i]) %>%
      as.numeric(unlist(.)) %>%
      .[length(.)-4] ->data_sample$score_vader[i]
  }, error = function(e){
    Loop_Error <<- T})
  if (Loop_Error){
    data_sample$score_vader[i] <- "Error"
  }
}

data_sample$score_vader
1                   -0.421
2                   -0.440
3                    0.444
4                   -0.103
5                    0.000
6                    0.000
7                   -0.581
8                    0.000
9                   -0.340
10                   0.000

解决方案

原代码只提取了compound对应的元素(. [length(.)-4]),要保存完整评分结果,需调整循环逻辑,将每条推特的完整Vader结果存储为结构化数据。

修改后的循环代码

# 初始化列表存储完整结果
vader_full_results <- list()

for (i in 1:length(data_sample$text)){
  Loop_Error <- FALSE
  tryCatch({ 
    # 直接保存完整的Vader分析结果
    vader_result <- get_vader(data_sample$text[i])
    vader_full_results[[i]] <- vader_result
  }, error = function(e){
    Loop_Error <<- TRUE})
  # 出错时填充NA值,保证结果结构一致
  if (Loop_Error){
    vader_full_results[[i]] <- list(word_scores = NA, compound = NA, pos = NA, neu = NA, neg = NA, but_count = NA)
  }
}

# 将列表转为数据框,合并到原数据集
vader_full_df <- do.call(rbind.data.frame, vader_full_results)
data_sample <- cbind(data_sample, vader_full_df)

代码说明

  1. 用列表vader_full_results存储每条推特的完整评分字段,避免丢失word_scores、pos、neu等信息。
  2. 异常处理部分统一返回含所有字段的NA值列表,确保后续转换数据框时结构不混乱。
  3. 最后通过do.call(rbind.data.frame, ...)将列表转为数据框,合并到原数据集后,每条推特对应的所有评分字段都会被保留。

输出示例

处理后data_sample会新增对应评分列,示例结构如下:

word_scorescompoundposneunegbut_count
{0, 0, 0, 0, 0, 0, 0, 0, 0, -1.8}-0.42100.7630.2370
..................

内容的提问来源于stack exchange,提问作者M. Talha Bin Asif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:54:20