You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

去除文本停用词时出错:单个'd'被误删的解决求助

解决停用词误删单词中'd'的问题

问题根源

你碰到的问题是nltk英文停用词里的'd'是用来匹配单独出现的缩写(比如指代would/had的情况),但你的文本处理逻辑没按完整单词来过滤,反而把单个字符拿去匹配停用词,才导致正常单词里的'd'被误删。

正确处理方案

1. 按完整单词过滤(推荐)

停用词过滤本来就该针对完整单词,先分词再过滤就不会有问题:

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

stop = set(stopwords.words('english'))
text = "I don't think this d is a problem"

# 先把文本拆成完整单词
tokens = word_tokenize(text)
# 只移除完全匹配停用词的项
filtered_tokens = [token for token in tokens if token.lower() not in stop]

print(filtered_tokens)
# 输出: ["n't", 'think', 'problem']

这样只会删掉单独出现的'd',像"don't"里的'd'属于单词的一部分,根本不会被匹配到停用词,自然不会被误删。

2. 手动移除停用词里的'd'(可选)

要是你完全不需要处理单独的'd'这种缩写,也可以直接从停用词集合里删掉它:

stop = set(stopwords.words('english'))
stop.discard("d")  # 移除单个'd'

但不建议这么做——毕竟单独出现的'd'确实是需要过滤的停用词,还是按完整单词过滤的方案更合理。

别踩这个坑!

要是你之前的处理逻辑是像下面这样逐个字符处理,那肯定会出问题:

# 错误示例!别这么写!
text = "don't"
filtered_text = ''.join([c for c in text if c not in stop])
# 结果会变成"ont"——'d'被误删了

这种把字符和单词混为一谈的逻辑,就是问题的导火索。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:45:27