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

基于tm包TermDocumentMatrix获取两文档高频共现词的方法与优化

解决方案

一、现成实现情况

tm包本身没有直接提供该功能的内置函数,但可以通过结合基础R操作和tm包的现有工具快速实现,无需从头编写复杂逻辑。

二、代码优化方案(避免数据框)

直接利用稀疏矩阵的特性操作,能大幅提升效率,具体步骤和代码如下:

优化后的函数代码

top_shared_terms <- function(tdm, doc1, doc2, k) {
  # 提取两个目标文档的词频向量
  doc1_freq <- tdm[, doc1]
  doc2_freq <- tdm[, doc2]
  
  # 筛选同时出现在两个文档中的术语索引
  shared_indices <- which(doc1_freq > 0 & doc2_freq > 0)
  
  # 计算术语的总词频(可按需改为取两文档中的最大/最小频率)
  total_freq <- doc1_freq[shared_indices] + doc2_freq[shared_indices]
  
  # 按总词频降序排序,提取术语名称
  sorted_terms <- names(shared_indices)[order(-total_freq)]
  
  # 返回前k个结果,若不足k个则返回全部
  head(sorted_terms, k)
}

代码说明

  • 直接操作稀疏矩阵的列,避免了转换数据框带来的内存浪费,大矩阵场景下效率优势明显
  • 用which()直接定位符合条件的术语索引,比数据框筛选逻辑更简洁高效
  • 排序环节直接基于词频逆序排列术语名称,无需额外数据结构转换

如果你的词频排序依据是术语在单个文档中的频率(比如取两个文档里的较高值),只需把total_freq的计算改为pmax(doc1_freq[shared_indices], doc2_freq[shared_indices])即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:01:10