文本清洗与规整
解析出来的文本通常带着各种噪声:跨行断字、页眉页脚、页码、连续空行、全角半角混用、软换行。清洗的目标是让同一份语料在切分、分词与检索三个环节表现出稳定一致的行为——比如全角半角不统一,同一个术语在倒排里就是两个词项,统计与匹配都会失真。清洗规则必须配抽样人工核对:正则一旦写宽,删掉的可能正是正文里的编号与单位。
基本信息
| 典型动作 | 合并英文断字、压缩空行、统一空白、删页码与页眉页脚 |
|---|---|
| 顺序要求 | 全角半角统一必须在分词与索引入库之前完成 |
| 识别方式 | 跨页高频重复文本统计可批量识别页眉页脚 |
| 验证方式 | 抽样对比清洗前后文本,确认正文没有被误删 |
| 风险 | 规则过激会删掉正文中的编号、单位与年份 |
典型使用场景
- PDF 解析产物入库前:清理页码、页眉页脚与断字
- 多来源语料统一:把全角数字、半角标点统一成一套写法
- 英文文献处理:合并行尾连字符,避免检索词被切断
- 表格与正文分离:删除重复的分隔线字符,保留表头
- 清洗规则回归:规则变更后在固定样本上跑对比,确认删改范围
清洗函数示例
清洗函数示例
import re
def clean(t: str) -> str:
t = re.sub(r'-\n(?=[a-z])', '', t) # 英文断字连字符合并
t = re.sub(r'\n{2,}', '\n', t) # 压缩连续空行
t = re.sub(r'[ \t]+', ' ', t) # 合并连续空白
t = re.sub(r'第\s*\d+\s*页', '', t) # 去页码
return t.strip()常见动作与风险
| 动作 | 目的 | 风险 |
|---|---|---|
| 合并行尾连字符 | 还原被拆开的英文单词 | 误合并真正的连字符复合词 |
| 删页眉页脚 | 去除跨页重复噪声 | 正文中的固定抬头被误删 |
| 压缩空行 | 统一段落边界 | 代码块与表格的格式被破坏 |
| 全角转半角 | 统一词项写法 | 中文标点被转换后语义标点丢失 |
清洗规则与切分规则要一起版本化:只改清洗不改切分统计口径时,块数、平均块长的历史对比会失真,回归报告需要标注规则版本。