quanteda使用指南:如何在分析时保留停用词列表中的指定词汇
quanteda保留指定停用词不被过滤的实现方法
核心逻辑非常简单:quanteda没有单独的“停用词豁免”配置项,所有停用词过滤都是基于传入的停用词字符向量做精确匹配删除,你只需要在传入停用词表前,把需要保留的词汇从停用词向量中剔除即可。
基础操作步骤
- 第一步:获取你原本要使用的基础停用词表,比如调用
stopwords()函数获取对应语言的内置停用词,或者导入自己整理的停用词表 - 第二步:明确列出你需要保留、不参与停用词过滤的目标词汇
- 第三步:从基础停用词表中删除这些目标词汇,生成自定义停用词表
- 第四步:将自定义停用词表传入分词过滤、dfm构建的对应参数即可
代码示例
比如做英文文本分析时,想保留否定词no和not不被过滤,代码如下:
library(quanteda) # 1. 获取英文基础停用词表 en_stop <- stopwords("en") # 2. 定义需要保留的词汇 keep_words <- c("no", "not") # 3. 生成过滤后的自定义停用词表 custom_stop <- en_stop[!en_stop %in% keep_words] # 4. 分词时使用自定义停用词表过滤 demo_tokens <- tokens(c("I do not think this works.", "No, it is totally bad.")) filtered_tokens <- tokens_remove(demo_tokens, custom_stop) # 查看过滤结果,no和not都会被保留 filtered_tokens
如果是直接构建文档特征矩阵,逻辑完全一致,把自定义停用词表传给dfm()的remove参数即可:
demo_dfm <- dfm(demo_tokens, remove = custom_stop)
简便写法
如果只需要保留1-2个词,不需要单独赋值变量,可以直接在行内完成停用词表处理,比如仅保留will:
filtered_tokens <- tokens_remove(demo_tokens, stopwords("en")[!stopwords("en") %in% "will"])
注意事项
- 匹配规则区分大小写:quanteda分词默认开启小写转换(
tolower = TRUE),此时你要保留的词汇统一写小写形式即可;如果关闭了小写转换,需要保证待保留词汇和文本中的实际大小写完全匹配,否则剔除失效。 - 该方法对所有来源的停用词表都生效,不管是内置多语言停用词、外部导入的自定义停用词表,还是合并了领域专用词的停用词表,操作逻辑完全一致。
内容的提问来源于stack exchange,提问作者Manuel Spínola
相关产品推荐
相关产品推荐

