NLP预处理困惑:停用词移除与词干提取的顺序疑问
针对Twitter情感分析中停用词与否定词处理的解决方案
1. 停用词移除对负面评论的影响
直接移除停用词肯定会破坏负面语义,比如你举的例子i food was not good,如果把"not"当成停用词删掉,就变成了"food good",完全扭曲了原本的负面情感。所以绝对不能把否定词(not、no等)加入停用词表,必须保留这类词。
2. 缩略否定词的处理方法
像wasn't、don't这类缩略词,核心是先做缩略词展开,把它们转换成完整的否定结构:
wasn't→was notdon't→do notcan't→can not
你可以自己维护一个常用缩略词映射表,或者用NLP工具的内置模块来自动展开。展开后就能识别出"not"这类否定词,进而在停用词过滤时保留它们。
另外,进阶一点的做法是标记否定语境:在否定词后面的所有词(直到下一个标点或分句)前加上否定前缀,比如"wasn't good"展开后变成"was not good",再处理成"was not_good"。这样模型能明确区分"good"和"not_good"的语义差异,比单纯保留"not"效果更好。
3. 词干提取与停用词过滤的顺序
你之前考虑先做词干提取再移除停用词确实不合理,正确的预处理顺序应该是:
- 第一步:文本清洗(去除特殊符号、URL等)
- 第二步:缩略词展开(处理
wasn't这类词) - 第三步:分词
- 第四步:停用词过滤(排除否定词)
- 第五步:词干提取/词形还原
原因很简单:如果先做词干提取,部分缩略词可能被处理得混乱,而且停用词表都是基于完整词汇的,先过滤停用词能减少后续词干处理的冗余。
额外建议
针对Twitter数据集的特殊性,还可以注意:
- 处理表情符号:比如😠、😢这类表情本身带有强烈情感,不要当成垃圾字符删掉,可以转换成文本标记(比如
:angry:) - 处理@提及和话题标签:如果不需要用户信息,可以移除@用户名,但话题标签#BadFood这类可以保留并拆分(比如#BadFood → "bad food")
内容的提问来源于stack exchange,提问作者Suhas Gajanana
相关产品推荐
相关产品推荐

