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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:53:11