R语言中AWS Comprehend情感分析相同文本结果不一致的解决方法
问题根源
两种调用传入的文本内容与格式存在差异,导致AWS Comprehend返回不同的情感分析结果:
- 数据框拼接后的文本:所有行以空格连接,无换行,原第四行的
Underneath保持大写,与第三行是两个独立部分(即...presents Underneath...)。 - 直接输入的文本:包含换行符,第三行与第四行合并为一行且
Underneath改为小写(即...presents underneath...),同时存在换行分隔的结构差异。
解决方法
要得到一致结果,必须确保传入detect_sentiment()的文本完全一致,可根据需求选择以下两种调整方式:
方式1:让数据框生成与直接输入一致的文本
如果希望对齐直接输入的分析结果,修改数据框拼接逻辑:
# 调整数据框内容:合并第三、四行,将Underneath转为小写 df_adjusted <- df1 df_adjusted$line[3] <- paste(df_adjusted$line[3], tolower(df_adjusted$line[4])) df_adjusted <- df_adjusted[-4, ] # 用换行符拼接(替代空格),跳过不必要的iconv转换(原文本已是ASCII) lyrics_df1 <- df_adjusted %>% stringr::str_c(collapse = "\n") # 调用情感分析 detect_sentiment(lyrics_df1)
方式2:让直接输入的文本与数据框拼接结果一致
如果希望对齐数据框拼接后的分析结果,使用完全匹配的文本调用:
detect_sentiment("I don't want a lot for Christmas There is just one thing I need I don't care about the presents Underneath the Christmas tree I just want you for my own")
核心注意事项
- 文本完全匹配:AWS Comprehend的情感分析对文本的细微差异(空格、换行、大小写、内容拼接方式)敏感,必须保证传入文本完全相同。
- iconv的同步:如果原文本包含非ASCII字符,直接输入的文本也需要同步执行
iconv(..., from = "UTF-8", to = 'ASCII//TRANSLIT')转换。
内容的提问来源于stack exchange,提问作者DunkinDont
相关产品推荐
相关产品推荐

