如何将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
相关产品推荐
相关产品推荐

