文本清洗与规范化:停用词过滤、正则表达式与词干提取
1. 为什么需要文本清洗?
我们接触到的非结构化文本,很少是“拿来就能用”的。比如爬取的网页、社交媒体动态、客服聊天记录,总充斥着各种干扰信息——
这些“脏东西”会分散模型注意力、降低计算效率、干扰结果质量,比如:
- 链接/表情完全不包含业务语义
- HTML标签只是排版标记
- 重复的标点/语气词(“!!!”、“哦~哦~”)会引入冗余
清洗后理想状态是保留核心词序列:
["年度", "大促", "手慢", "无", "仅限", "新粉"]
2. 基础清洗“工具箱”
这部分的操作大多用Python正则+标准库就能完成,遇到复杂场景再考虑第三方库。
2.1 去除 HTML 标签
简单标签用正则就能处理,嵌套/残缺标签推荐用 lxml 更健壮。
2.2 清理 URL、邮箱与冗余占位符
这些信息在通用NLP任务(如分类、摘要)中通常可以直接删。
2.3 全角转半角 + Unicode 规范化
处理跨平台/输入法带来的字符歧义,比如“HELLO”和“HELLO”应该是一个意思。
2.4 去除重复冗余 + 多余空格
比如社交媒体的“啊啊啊啊啊啊开心”、连续换行制表符。
3. 停用词过滤:去掉“语义噪音”
停用词是指高频但无/弱业务语义的词,比如中文的“的、了、和”,英文的“the、a、is”。
3.1 中文停用词基础使用
我们可以用 jieba 分词后,再对照停用词表过滤。
3.2 自定义停用词加载
业务场景下,往往需要补充特定停用词(比如医疗场景的“患者、您好”,电商场景的“亲、包邮”),可以从本地文件加载。
4. 英文专属:词干提取 vs 词形还原
中文没有严格的“词形变化”,但英文有(比如 running、runs、ran),我们需要把它们统一成原型或词干,减少特征维度。
4.1 词干提取(Stemming)
快速但不保证是有效单词,适合对结果要求不高的场景(如关键词提取、粗分类)。
4.2 词形还原(Lemmatization)
需要词性标注(POS Tag)才能准确还原,结果是有效单词,适合对精度要求高的场景(如翻译、问答)。
5. 快速搭建预处理管道
把前面的步骤封装成类,方便批量处理文本。
6. 避坑指南:不要“过度清洗”
文本清洗不是越干净越好,要根据具体任务调整:
- 情感分析:保留感叹号、问号、表情(如 “!!!”、“😠”、“😊”),它们包含强烈的情感倾向
- NER(命名实体识别):不要删除数字、全角字符(比如人名中的全角括号、公司名中的全角连字符)
- 机器翻译:不要过度压缩重复字符、删除标点(比如引号、书名号)
7. 小结速查
🔗 扩展阅读

