R主题建模叠加自定义停用词后目标词未被移除问题咨询
问题原因与修复方案
你的代码核心问题是词干提取的执行顺序错误,停用词只匹配了原词形态,没有覆盖变形后的词干形态,导致漏删。具体问题和修复方案如下:
核心问题说明
你当前的执行逻辑为:分词→移除原词形式的停用词→构建dfm→修剪dfm→对dfm特征做词干提取。
如果语料中存在monkeys这类未被加入停用词列表的变形词,在移除步骤不会被过滤,后续词干提取时会被转为monkey,最终出现在模型输出结果中。
其他可排查点
- 未统一语料大小写:如果语料中存在首字母大写的
Monkey、全大写的MONKEY,会因为大小写不匹配漏删 - 停用词加载异常:未正确加载
stopwords包导致默认停用词列表为空,或自定义停用词拼接失败 - 可通过临时输出中间结果验证:在
tokens_remove步骤后执行head(tokens_select(tokens_object, pattern = "monkey*")),确认停用词是否被正确移除
修正后代码
library(quanteda) library(stopwords) # 预处理停用词,统一转为词干形态 custom_stops <- c("fat","monkey","ce","fallen") custom_stops_stem <- char_wordstem(custom_stops, language = "english") all_stops <- c(custom_stops_stem, char_wordstem(stopwords("en"), language = "english")) # 调整执行顺序:分词→转小写→词干化→移除停用词→构建并修剪dfm dfm_final <- tokens(corp, remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE) %>% tokens_tolower() %>% tokens_wordstem(language = "english") %>% tokens_remove(pattern = all_stops) %>% dfm() %>% dfm_trim(min_termfreq = 15, min_docfreq = 20, max_docfreq = 250)
内容的提问来源于stack exchange,提问作者newabnormal
相关产品推荐
相关产品推荐

