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

如何在quanteda中对同文档标识的dfm执行词项匹配加减运算?

在quanteda中对同标识文档的dfm执行减法运算的方法

你提到的需求非常明确——要让两个拥有相同文档标识的dfm,对相同文档、相同词项的数值做dfm1 - dfm2的运算,同时保留仅在单个dfm中出现的词项的原数值。在quanteda里实现这个需求的关键是先统一两个dfm的特征集合,确保运算时每个位置都对应相同的文档和词项,之后就可以直接执行减法了。

步骤1:重现你的示例dfm

首先先把你给出的两个dfm创建出来,方便后续操作:

library(quanteda)
library(tibble)

# 创建dfm1
dfm1 <- tibble(text = c('hello world', 'hello quanteda')) %>% 
  corpus() %>% tokens() %>% dfm()

# 创建dfm2
dfm2 <- tibble(text = c('hello world', 'good nigth quanteda')) %>% 
  corpus() %>% tokens() %>% dfm()

步骤2:统一特征集合并执行减法

quanteda的dfm_match()函数可以帮我们把两个dfm的特征(词项)统一成包含所有词项的集合,缺失的词项会自动填充0。这样处理后,两个dfm的维度完全一致,就可以直接做减法了:

# 获取两个dfm的所有词项,合并成一个完整的特征集合
all_features <- union(featnames(dfm1), featnames(dfm2))

# 让两个dfm匹配到统一的特征集合,缺失词项填0
dfm1_matched <- dfm_match(dfm1, features = all_features)
dfm2_matched <- dfm_match(dfm2, features = all_features)

# 执行减法运算:dfm1数值减去dfm2数值
dfm_subtracted <- dfm1_matched - dfm2_matched

查看运算结果

运行dfm_subtracted就能得到你想要的结果:

dfm_subtracted

Document-feature matrix of: 2 documents, 5 features (40.0% sparse).
2 x 5 sparse Matrix of class "dfm"
features
docs hello world quanteda good nigth
text1 0 1 0 0 0
text2 1 0 0 -1 -1

结果说明

  • 对于两个dfm都有的词项:比如text1的hello,dfm1和dfm2都是1,结果为1-1=0;text2的quanteda都是1,结果为1-1=0。
  • 仅在dfm1里的词项:比如text1的world,dfm2里对应位置是0,结果为1-0=1;text2的hello,dfm2里是0,结果为1-0=1。
  • 仅在dfm2里的词项:比如text2的good和nigth,dfm1里对应位置是0,结果为0-1=-1。

这个方法完美贴合你想要的运算逻辑,而且是quanteda官方推荐的dfm算术运算前置步骤哦。

内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:39:32