如何在quanteda的dfm特征频率统计中加入自定义短语统计?
实现单词语频与自定义短语频率的同时统计
要在quanteda中同时保留单词语频并加入自定义短语的频率统计,核心是先将目标短语合并为单个token,再进行常规的频率计算。以下是具体实现步骤:
步骤1:加载包与准备数据
首先加载所需库,并构造示例数据(如果已有现成的df_sample可跳过数据构造部分):
# 加载包 library(quanteda) library(quanteda.textstats) # 示例语料(替换为你的df_sample) df_sample <- data.frame(text = c( "Mr. President gave a speech about the World Record. Super Bass was mentioned too.", "Another mention of Mr. President and World Record in the same text. Super Bass is popular." )) # 自定义短语列表 key_lookups <- c("Mr. President", "World Record", "Super Bass")
步骤2:分词并合并自定义短语
先将语料转为corpus,再分词,关键是用tokens_compound把目标短语合并为单个token,这样统计时会被当作独立特征:
# 创建语料库 corp <- corpus(df_sample, text_field = "text") # 分词(保留标点,避免拆分"Mr."这类短语) toks <- tokens(corp, remove_punct = FALSE) # 将短语转为phrase对象,用于合并 phrases_to_compound <- phrase(key_lookups) # 合并短语为单个token toks_compounded <- tokens_compound(toks, phrases_to_compound, concatenator = "_")
这里concatenator = "_"是将短语中的空格替换为下划线,方便后续识别,你也可以根据需要调整。
步骤3:生成DFM并计算频率
将处理后的tokens转为文档-特征矩阵,再计算频率:
# 生成DFM dfm_obj <- dfm(toks_compounded) # 计算频率统计 freq_stats <- textstat_frequency(dfm_obj) # 可选:将合并后的token还原为原短语格式 freq_stats$feature <- gsub("_", " ", freq_stats$feature) # 查看结果 head(freq_stats, 10)
运行后,freq_stats会同时包含单个词汇(如"speech"、"about")和自定义短语(如"Mr. President"、"World Record")的频率数据。
关键说明
- 如果你的语料需要预处理(如小写化、移除停用词),请确保在合并短语之后进行,避免因为小写化导致短语匹配失败(比如"mr. president"无法匹配原短语)。
- 若短语中包含特殊字符,需确保分词时保留对应字符,否则会影响合并效果。
内容的提问来源于stack exchange,提问作者R_Student
相关产品推荐
相关产品推荐

