You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R语言STM模型:生成指定格式Topic Proportion表格及相关技术问题咨询

解答:STM模型主题占比表格生成与主题存在性判断

作为STM和R语言的初学者,你要的这种主题占比表格其实不难实现——STM包本身没有直接生成该格式的函数,但我们可以通过提取模型输出的核心数据,手动整理出你需要的结果。下面是具体的步骤和示例代码:

1. 获取百分比形式的主题全局占比

STM模型训练完成后,会输出一个theta矩阵,这个矩阵的每一行对应一篇文档,每一列对应一个主题,值代表该文档中对应主题的占比。我们可以基于这个矩阵计算全局的主题占比(转成百分比):

# 假设你的STM模型对象命名为stm_model
library(stm)

# 提取文档-主题分布矩阵theta
theta_matrix <- stm_model$theta

# 计算每个主题的全局占比(转成百分比,保留两位小数)
topic_proportions <- colSums(theta_matrix) / nrow(theta_matrix) * 100
topic_prop_df <- data.frame(
  Topic = paste0("Topic ", 1:length(topic_proportions)),
  `Topic Proportions in %` = round(topic_proportions, 2)
)

2. 生成带“是否出现在Literate”列的表格

首先得明确你说的“Literate”指的是哪类文档——比如你有一个元数据变量(比如doc_data$is_literate)标记了文档是否属于Literate类别。我们可以筛选出这类文档的主题分布,然后判断每个主题是否在其中出现(这里设定主题占比>0.01就算出现,你可以根据需求调整阈值):

# 假设你的文档元数据框是doc_data,其中is_literate是逻辑向量(TRUE表示属于Literate)
# 筛选Literate文档的theta矩阵
literate_theta <- theta_matrix[doc_data$is_literate, ]

# 判断每个主题是否在Literate文档中出现
topic_in_literate <- apply(literate_theta, 2, function(x) any(x > 0.01))

# 把结果添加到之前的数据框
topic_prop_df$`Present in Literate` <- ifelse(topic_in_literate, "Yes", "No")

如果要生成美观的可导出表格,可以用knitrkableExtra包优化样式:

library(knitr)
library(kableExtra)

# 生成带样式的表格
kable(topic_prop_df, caption = "Topic Proportion Summary") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))

3. 补充说明

STM包没有内置直接生成这种表格的函数,但核心的theta矩阵已经包含了所有需要的信息,通过简单的求和、筛选和判断就能快速得到你要的结果。如果你的“Literate”定义不是文档类别,而是指特定文本特征,只需要调整筛选文档的逻辑即可。

内容的提问来源于stack exchange,提问作者JS J

火山引擎 最新活动