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

Quanteda实操:移除目标词出现频次过低的文档

用Quanteda过滤含特定关键词的文档

下面针对你提到的两种过滤需求,给出具体实现代码:

一、按绝对频次过滤(移除关键词总出现次数低于3的文档)

  1. 先统计每份文档中refugee和asylum seeker的总出现次数:
# 加载quanteda包
library(quanteda)

# 假设你的语料库对象是corpus_obj
# 处理多词单元"asylum seeker",避免被拆分
kw_tokens <- tokens(corpus_obj, remove_punct = TRUE) %>%
  tokens_compound(pattern = phrase("asylum seeker"))

# 统计每份文档中两个关键词的总频次
kw_counts <- dfm(kw_tokens, select = c("refugee", "asylum_seeker")) %>%
  rowSums()
  1. 过滤语料库,只保留总频次≥3的文档:
filtered_corpus_absolute <- corpus_obj[kw_counts >= 3]

二、按相对频率过滤(移除相对频率均低于阈值的文档)

步骤1:计算整体平均相对频率

相对频率用关键词频次/文档总词数计算,先算出两个关键词在整个语料库的平均水平:

# 生成全量dfm
full_dfm <- dfm(kw_tokens)

# 统计关键词总频次和语料库总词数
total_kw_counts <- colSums(dfm_select(full_dfm, c("refugee", "asylum_seeker")))
total_words <- sum(full_dfm)

# 得到两个关键词各自的整体平均相对频率
avg_rel_freq <- total_kw_counts / total_words

你可以用这个平均值作为阈值X,也可以根据需求调整(比如取平均值的一半)。

步骤2:计算单文档相对频率并过滤

# 计算每份文档的总词数
doc_word_counts <- rowSums(full_dfm)

# 计算每份文档中两个关键词的相对频率
kw_rel_freq <- dfm_select(full_dfm, c("refugee", "asylum_seeker")) / doc_word_counts

# 设置阈值X,这里用整体平均值举例
X <- avg_rel_freq

# 过滤逻辑:只要有一个关键词相对频率≥阈值,就保留文档
keep_rows <- apply(kw_rel_freq, 1, function(x) any(x >= X))
filtered_corpus_relative <- corpus_obj[keep_rows]

如果需要固定阈值(比如0.001),直接把X替换为对应数值即可。

另外,如果你要实现开头提到的「移除密度得分最低的10%文档」,可以基于相对频率分位数过滤:

# 计算每份文档的关键词总相对频率
total_rel_freq <- rowSums(kw_rel_freq)

# 移除相对频率最低的10%文档
threshold <- quantile(total_rel_freq, 0.1)
filtered_corpus_density <- corpus_obj[total_rel_freq >= threshold]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:20:24