在NLP项目中,“数据清洗”是连接“原始数据”与“可用特征”的关键环节——未经清洗的文本可能包含特殊符号、乱码、重复内容,直接输入模型会导致训练噪声增加,甚至让模型学习到错误规律(如将“###”识别为有效语义)。本文聚焦NLP数据清洗的三大核心痛点:特殊符号过滤、乱码修复、冗余文本去重,提供可直接复用的技术方案与避坑技巧,帮你快速提升数据质量。
一、特殊符号过滤:从“杂乱文本”到“干净内容”
特殊符号是NLP数据中最常见的“噪声”,包括HTML标签(如 <br> )、无意义符号(如“★、■”)、转义字符(如“\n、\t”)等,若不处理会干扰分词、词向量生成等后续步骤。
1. 先分类:明确要过滤的符号类型
不同来源的数据,特殊符号的分布差异极大,需先分类再针对性处理:
- 格式类符号:转义字符(\n、\t、\r)、HTML/XML标签( <div> 、 <img src="..."> )、Markdown语法(#、**),常见于爬取的网页文本、用户输入的带格式内容;
- 装饰类符号:表情符号(😂、👍)、特殊符号(★、■、——)、拼音/英文符号(·、_、~),常见于UGC评论、社交平台文本;
- 不可见符号:全角空格(\u3000)、零宽空格(\u200B)、软回车,肉眼难以识别,但会导致文本长度计算错误、分词断裂。
2. 高效过滤方案:正则+工具库组合
方案核心:用正则表达式匹配“噪声模式”,结合工具库处理复杂场景
- 基础符号过滤(Python代码示例):
针对格式类、装饰类符号,用正则匹配并替换为空字符串,覆盖90%以上的基础场景:
import re
def clean_special_chars(text):
# 1. 移除HTML标签
text = re.sub(r'<[^>]+>', '', text)
# 2. 移除转义字符(\n、\t、\r)
text = re.sub(r'[\n\t\r]', '', text)
# 3. 移除特殊符号(保留中文、英文、数字、常见标点)
# 匹配规则:除了[\u4e00-\u9fa5a-zA-Z0-9,。!?;:""''()]之外的字符
text = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9,。!?;:""''()]', '', text)
# 4. 移除全角空格、零宽空格
text = text.replace('\u3000', '').replace('\u200B', '')
return text
# 测试:原始杂乱文本
raw_text = "<p>今天天气真好!★\n适合去公园~ \u3000(附图片<img src='park.jpg'>)</p>"
clean_text = clean_special_chars(raw_text)
print(clean_text) # 输出:今天天气真好!适合去公园(附图片)<

最低0.47元/天 解锁文章


被折叠的 条评论
为什么被折叠?



