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

如何在quanteda中基于分组变量统计搭配词?

解决方案

quanteda原生支持基于docvars对搭配分析结果分组,两种常用实现路径如下:

方案1:按分组分别计算搭配(适合获取各分组专属显著搭配)

核心逻辑是先按docvars中的分组字段拆分tokens对象,对每个分组独立执行搭配分析,最终合并带分组标记的结果。
示例代码:

# 加载quanteda包
library(quanteda)

# 你的原始生成tokens逻辑
toks <- tokens(text$abstracts)
# 假设docvars中的分组字段为`subject`(可替换为你实际的分组字段名)
toks_by_group <- tokens_group(toks, groups = subject)

# 对每个分组单独计算搭配
colloc_grouped <- lapply(toks_by_group, textstat_collocations)

# 合并为统一数据框,新增group列标记所属分组
colloc_grouped_df <- do.call(rbind,
  lapply(names(colloc_grouped), function(g) {
    cbind(group = g, colloc_grouped[[g]])
  })
)

运行后可直接筛选特定分组,查看该分组下的高频、高显著性搭配。

方案2:全局搭配按分组统计分布(适合先算完全局搭配后,跨组比对出现频次)

如果已经计算完全局搭配,需要查询每个搭配在不同分组的出现情况,可通过构造搭配专属dfm实现分组统计:
示例代码:

# 你原始的全局搭配计算逻辑
toks <- tokens(text$abstracts)
collocations <- textstat_collocations(toks)

# 提取全局搭配的短语模式
colloc_patterns <- phrase(collocations$collocation)

# 构造仅保留搭配的dfm,按分组字段统计频次
dfm_colloc <- toks |>
  tokens_select(pattern = colloc_patterns, padding = FALSE) |>
  dfm(groups = subject) # 替换为你的实际分组字段名

# 转换为数据框,行对应搭配,列对应各分组的出现频次
colloc_distribution <- convert(dfm_colloc, to = "data.frame")

补充:kwic结果关联docvars的方法

如果需要保留搭配的上下文信息,也可以直接给原有kwic结果关联docvars,不用仅依赖text1、text2这类行标识:

kwic_res <- kwic(toks, pattern = colloc_patterns, selection = 'keep')
# 合并kwic结果与对应文档的docvars
kwic_res_with_vars <- merge(kwic_res, docvars(toks), by.x = "docname", by.y = "row.names")

内容的提问来源于stack exchange,提问作者Fatih Bozdağ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 19:36:03