如何基于DFM生成情感量表?Quanteda R语言项目求助
解决Quanteda中KWIC语料库情感得分全为NA的问题
我来帮你搞定这个问题!你遇到的全NA结果,核心原因是你把DFM对象当成普通数据框来操作了——quanteda的dfm是特殊的矩阵类对象,不能直接用$来提取特征列,这才导致计算时取不到数值,最终全是NA。下面给你两种可靠的解决方案:
方法1:将DFM转换为数据框后计算
把DFM转成常规数据框,就能像处理普通数据一样操作列了:
# 把DFM转换成带文档变量的数据框 sent_df <- convert(sentkwicMigration8, to = "data.frame") # 按照要求计算logit情感得分 sent_df$sentiment <- log((sent_df$positive + 0.5) / (sent_df$negative + 0.5)) # 查看结果 summary(sent_df$sentiment)
方法2:直接从DFM提取数值计算(保留DFM结构)
如果你想继续保留DFM对象的结构,可以直接提取特征的数值矩阵来计算,再把得分存回文档变量:
# 提取positive和negative特征的数值矩阵 sent_matrix <- as.matrix(dfm_select(sentkwicMigration8, pattern = c("positive", "negative"))) # 计算情感得分 sentiment_scores <- log((sent_matrix[, "positive"] + 0.5) / (sent_matrix[, "negative"] + 0.5)) # 将得分添加到DFM的文档变量中 docvars(sentkwicMigration8, "sentiment") <- sentiment_scores # 查看结果 summary(docvars(sentkwicMigration8, "sentiment"))
额外检查点
如果还是有少量NA,可能是某些文档的positive和negative同时为0?不过你加了0.5的平滑项,这种情况会得到log(0.5/0.5) = log(1) = 0,不会出现NA。所以主要问题还是之前的列访问方式错误,用上面两种方法就能解决啦!
内容的提问来源于stack exchange,提问作者user13834194
相关产品推荐
相关产品推荐

