如何从R语言STM包的结构主题模型结果中导出文档-主题数据框至CSV文件
如何从STM模型结果中导出文档-主题数据框至CSV
我明白你在使用STM包训练结构主题模型后,卡在了导出文档-主题分布这一步——别担心,这其实是个非常常见的需求,STM包内置了直接提取这些数据的方式,下面我一步步给你演示:
1. 提取文档-主题概率矩阵
当你训练完STM模型后(比如你的poliblogPrevfit对象),模型结果里的theta属性就是文档-主题概率矩阵:每一行对应一个文档,每一列对应一个主题,单元格里的值是该文档属于对应主题的概率。
你可以直接提取并转换为数据框:
# 从训练好的模型中提取文档-主题概率矩阵 doc_topic_matrix <- poliblogPrevfit$theta # 转换为数据框,并给主题列设置清晰的名称(比如Topic_1、Topic_2...) doc_topic_df <- as.data.frame(doc_topic_matrix) colnames(doc_topic_df) <- paste0("Topic_", 1:ncol(doc_topic_df))
2. (可选)结合文档元数据
如果你想把文档的原始信息(比如文档ID、原文片段、你之前用到的event/Covid元数据)和主题分布放在一起,可以合并你的元数据框:
# 合并元数据与主题分布数据框 doc_topic_full <- cbind(out$meta, doc_topic_df)
3. 导出为CSV文件
最后用write.csv()函数把数据框导出到你指定的路径:
# 导出文件,row.names=FALSE避免把行号写入CSV write.csv(doc_topic_full, "document_topic_distribution.csv", row.names = FALSE)
额外需求:提取每个文档的主导主题
如果你不需要所有主题的概率,只想要每个文档最可能归属的主题,可以用下面的代码添加到数据框中:
# 找出每个文档概率最高的主题 doc_topic_df$Dominant_Topic <- apply(poliblogPrevfit$theta, 1, which.max) # 导出包含主导主题的版本 write.csv(doc_topic_df, "document_dominant_topic.csv", row.names = FALSE)
注意:如果你用的是selectModel选中的模型
如果你最终用的是selectModel函数筛选出的最优模型(比如你的selectModel = poliblogSelect$runout[[1]]),只需要把上面代码里的poliblogPrevfit替换成selectModel即可。
内容的提问来源于stack exchange,提问作者Monica Muller
相关产品推荐
相关产品推荐

