如何手动计算R中文档-词矩阵中指定词表的词频?
特定词汇在文档中的词频计算方案
一、tm_term_score的原理说明
你之前用的tm_term_score(DTM.tfidf, Wordlist)返回的不是实际词频,而是文档层面的TF-IDF加权得分。它的计算逻辑是:对每个文档,将词表里所有词汇对应的TF-IDF值求和,最终得到该文档的综合得分——这是加权后的结果,和原始词频完全是两个概念。
二、手动计算目标词汇的实际词频
要得到词表中每个词汇在各文档的真实出现次数,核心是基于**原始词频的文档-词矩阵(DTM)**来操作,步骤如下:
1. 生成原始词频DTM(若已有可跳过)
如果你的DTM是TF-IDF加权后的,需要重新生成原始词频矩阵:
# 假设corpus是你的语料库对象 DTM.tf <- DocumentTermMatrix(corpus, control = list( weighting = weightTf, # 采用原始词频权重 tolower = TRUE, # 统一转小写,避免词汇匹配失败 # 以下参数根据你的预处理需求调整 removeNumbers = TRUE, stopwords = TRUE ))
2. 筛选词表对应的词汇列
确保词表词汇与DTM列名匹配,然后提取目标列:
# 统一词表大小写,和DTM列名保持一致 Wordlist_clean <- tolower(Wordlist) # 只保留DTM中存在的目标词汇 target_terms <- intersect(Wordlist_clean, colnames(DTM.tf)) # 提取目标词汇的词频矩阵 DTM_target <- DTM.tf[, target_terms]
3. 转换为数据框得到词频结果
# 将稀疏矩阵转为普通矩阵,再转成数据框 Term_Frequency <- as.data.frame(as.matrix(DTM_target)) # 可选:添加文档ID列,方便对应原始文档 Term_Frequency$Document_ID <- rownames(Term_Frequency)
最终的Term_Frequency数据框中,每一行代表一个文档,每一列对应词表里的一个词汇,单元格数值就是该词汇在对应文档中的实际出现次数。
内容的提问来源于stack exchange,提问作者Li4991
相关产品推荐
相关产品推荐

