You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何移除不同版本停用词?现有代码残留dont类停用词的非自定义解法

解决quanteda中停用词残留(如"dont")的问题

嘿,这个问题我之前也踩过坑!原因其实很直白:你先移除了标点符号,导致像don't这类收缩词直接变成了dont,但stopwords("smart")列表里根本没有dont这个条目——它只收录了donot这类完整形式的停用词,自然没法匹配移除。

不用自定义停用词列表的话,只要调整处理顺序并利用quanteda内置的工具就能搞定:

核心思路

先拆分收缩词(把带撇号的收缩形式拆成完整单词),再移除标点、数字等冗余内容。这样拆分后的donot会被smart停用词列表正确识别并移除,不会留下dont这类残留。

修正后的代码

dfm <- tokens(df$text) %>%
  tokens_contractions() %>%  # 拆分收缩词:don't → do not, I'm → I am等
  tokens_remove(punct = TRUE, numbers = TRUE, symbols = TRUE) %>%
  tokens_remove(pattern = stopwords(source = "smart")) %>%
  tokens_wordstem()

为什么这能生效?

  • tokens_contractions()是quanteda专门处理英语收缩词的函数,能识别所有标准收缩形式并拆成对应的完整单词组合。
  • 先拆分再移除标点,就不会破坏收缩词的结构,拆分出来的donot都是smart停用词列表里的条目,后续的tokens_remove就能把它们彻底清理掉。

如果还有类似cant(来自can't)这类残留,用同样的方法也能解决——只要先处理收缩词,再做标点移除就行。

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

火山引擎 最新活动