在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)
代码说明
- 用列表
vader_full_results存储每条推特的完整评分字段,避免丢失word_scores、pos、neu等信息。 - 异常处理部分统一返回含所有字段的NA值列表,确保后续转换数据框时结构不混乱。
- 最后通过
do.call(rbind.data.frame, ...)将列表转为数据框,合并到原数据集后,每条推特对应的所有评分字段都会被保留。
输出示例
处理后data_sample会新增对应评分列,示例结构如下:
| word_scores | compound | pos | neu | neg | but_count |
|---|---|---|---|---|---|
| {0, 0, 0, 0, 0, 0, 0, 0, 0, -1.8} | -0.421 | 0 | 0.763 | 0.237 | 0 |
| ... | ... | ... | ... | ... | ... |
内容的提问来源于stack exchange,提问作者M. Talha Bin Asif
相关产品推荐
相关产品推荐

