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

如何将quanteda生成的dfm转换为类tm包DocumentTermMatrix的词频矩阵

嘿,这个问题其实用quanteda自带的工具就能轻松搞定,不用绕远路~ 我给你两种简单的方法,都能得到和tm生成的格式完全一致的词频数据框:

方法1:用quanteda专门的词频统计函数(推荐)

quanteda里的textstat_frequency()就是专门用来做词频统计的,默认会计算整个语料库的总频次,一步到位:

library(quanteda)
library(dplyr)  # 用来做列选择和重命名

# 先按你的代码生成包含1-3元ngram的dfm
myDfm <- dfm(df$text, ngrams = c(1,3))

# 生成目标格式的词频数据框
freq_matrix <- textstat_frequency(myDfm) %>%
  select(feature, frequency) %>%  # 提取词项和频次列
  rename(ST = feature, Freq = frequency)  # 重命名成和tm输出一致的列名

方法2:手动计算列和(适合喜欢底层操作的场景)

因为dfm本质是一个稀疏矩阵,我们可以直接用colSums()计算每个词项(包括多token的ngram)的总出现次数,再组装成数据框:

# 计算每个词项的总频次
total_frequencies <- colSums(myDfm)

# 转换为数据框,确保格式匹配
freq_matrix <- data.frame(
  ST = names(total_frequencies),
  Freq = as.numeric(total_frequencies),
  stringsAsFactors = FALSE  # 避免词项被自动转成因子类型
)

两种方法得到的结果都是一样的:第一列ST是包含单token和多token ngram的词项,第二列Freq是该词项在所有文档中的总出现次数,完全符合你想要的tm生成的格式~ 如果需要按频次排序,只要在后面加一句arrange(desc(Freq))就可以啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:48:33