基于关键词创建并计算共现百分比的Quanteda实现方法
使用Quanteda计算指定关键词与其他术语的共现百分比
实现步骤
- 加载依赖库与数据
首先加载quanteda包,并导入数据集:
library(quanteda) df <- data.frame(text = c("House Sky Blue", "House Sky Green", "House Sky Red", "House Sky Yellow", "House Sky Green", "House Sky Glue", "House Sky Green"))
- 构建文档-词矩阵(DFM)
将文本转换为语料库,分词后生成DFM,这是后续统计的基础:
# 创建语料库 corpus <- corpus(df$text) # 分词(移除标点,可按需调整分词规则) toks <- tokens(corpus, remove_punct = TRUE) # 生成文档-词矩阵 dfm <- dfm(toks)
- 筛选含目标关键词的文档
定位所有包含"House"的文档,并统计这类文档的总数:
# 获取包含"House"的文档索引 house_docs <- dfm[, "House"] > 0 # 统计含"House"的文档总数 total_house_docs <- sum(house_docs)
- 计算共现次数与占比
统计其他术语在这些文档中的出现次数,再计算占比(排除"House"和无关的"Sky"):
# 计算每个词在含House的文档中的出现次数 cooccur_counts <- colSums(dfm[house_docs, ]) # 移除目标关键词House和无关的Sky cooccur_counts <- cooccur_counts[!names(cooccur_counts) %in% c("House", "Sky")] # 格式化为分数形式的共现占比 cooccur_percent <- paste0(cooccur_counts, "/", total_house_docs)
- 输出指定格式结果
按照需求格式打印结果:
cat(paste0("feature=\"House\"\n percentage of co-occurrence \n\n")) for (term in names(cooccur_percent)) { cat(paste0(term, " = ", cooccur_percent[term], "\n")) }
关于textstat_simil返回NaN的说明
textstat_simil计算的是词向量之间的相似度(如余弦相似度),你的数据中"House"在所有文档中都出现,导致它的词向量方差为0,无法计算相似度,所以返回NaN。而我们需要的是共现比例,即含目标词的文档中同时出现其他词的比例,用上述基于DFM的统计方法更直接匹配需求。
内容的提问来源于stack exchange,提问作者R_Student
相关产品推荐
相关产品推荐

