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

如何修改停用词移除代码,同时去除数字、标点与特殊字符

解决方案

直接用string.punctuation替代手动枚举标点,再结合正则/字符串方法过滤数字和纯特殊字符token,改进后的代码如下:

import string
import re
from nltk.corpus import stopwords

# 加载英文停用词
eng_stopwords = stopwords.words('english')
# 合并停用词和所有标点,转成集合提升查找效率
complete_stopwords = set(eng_stopwords + list(string.punctuation))

def filter_tokens(words):
    cleaned_tokens = []
    for token in words:
        # 同时满足三个条件才保留:
        # 1. 不在停用词/标点集合内
        # 2. 不是纯数字(包括长数字token)
        # 3. 不是纯特殊字符(比如!!!、???、😀这类)
        if (token not in complete_stopwords 
            and not token.isdigit() 
            and not re.match(r'^[\W_]+$', token)):
            cleaned_tokens.append(token)
    return cleaned_tokens

# 应用到DataFrame列
df['removed'] = df['tokenized_text'].apply(filter_tokens)

关键改进点:

  • 用string.punctuation直接获取所有标准标点,不用手动罗列,覆盖更全面
  • 把停用词转成集合,比列表查找速度快很多,数据量大的时候效果明显
  • 新增两个过滤规则:
    • not token.isdigit():直接排除所有纯数字的token,不管是短数字还是长数字
    • re.match(r'^[\W_]+$', token):用正则匹配整个token都是非字母数字的情况,彻底过滤纯特殊字符、emoji这类无效token

如果不需要过滤emoji,只处理标点和数字,也可以把正则判断换成not all(char in string.punctuation for char in token),更轻量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:10:35