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

