文档解析是什么
文档解析是知识库入库前的第一道工序:把 PDF、Word、HTML、表格这类格式还原成可切分的文本,并尽量保留标题层级、列表与表格结构。它决定了后续检索的上限——解析时把两栏排版的正文串行、把表格拆成散字,后面无论换多好的嵌入模型都补不回来。扫描件还需要先做文字识别,识别质量同样是瓶颈。
基本信息
| 目标 | 把各种格式还原成带结构的干净文本 |
|---|---|
| 输入格式 | PDF、Word、HTML、Markdown、表格、图片与扫描件 |
| 关键输出 | 正文文本、标题层级、表格结构、来源页码 |
| 核心难点 | 多栏排版、表格、页眉页脚、扫描件识别 |
| 质量影响 | 解析错误会永久降低召回上限,后续无法补救 |
| 常见做法 | 先自动解析,再抽样人工校验并沉淀清洗规则 |
常见格式的处理方式
| 格式 | 处理方式 | 注意 |
|---|---|---|
| 文本型 PDF | 版式解析库按区块抽取 | 多栏与表格容易串行,要抽样检查 |
| 扫描型 PDF | 先做文字识别再解析结构 | 清晰度与倾斜角度直接决定上限 |
| Word 与 HTML | 按标签解析并保留标题层级 | 层级信息对切分帮助很大 |
| 表格资料 | 按表结构解析后再转文本 | 表头、合并单元格要单独处理 |
| 图片与图表 | 用视觉模型或识别工具转文字 | 数值与图例容易看错,关键数据要复核 |
典型使用场景
- 知识库入库:把制度、手册、说明书转成可检索片段
- 合同与报告处理:抽取条款与关键指标,保留页码便于引用
- 历史资料数字化:扫描件批量识别后进入检索链路
- 多来源汇总:同一主题的多个格式文档统一成同一种结构
- 数据核对:从解析结果中检查关键字段是否完整
解析后的清洗要点
解析后的清洗要点
text = parse_pdf(path) # 得到带区块信息的文本
# 去掉页眉页脚与页码噪声:它们会重复出现在每个片段里,浪费检索名额
text = drop_running_headers(text)
# 保留标题层级,供切分时按章节边界断开
text = keep_heading_levels(text)
# 表格转成结构化文本,避免行列错位
for t in extract_tables(text):
print(table_to_markdown(t))
# 每个片段都带上来源文件与页码,方便答案标注依据解析质量的检查清单
| 检查项 | 问题表现 | 处理 |
|---|---|---|
| 段落完整性 | 句子被栏位切断或顺序错乱 | 换解析器或先做版面分析 |
| 标题层级 | 层级丢失,切分只能按长度 | 保留并利用层级信息 |
| 表格正确性 | 行列错位、合并单元格丢失 | 改用表格专用解析方式 |
| 噪声内容 | 页眉页脚与广告文案混入正文 | 按重复模式过滤 |
| 识别准确率 | 错字与数字识别错误 | 抽样人工校验关键字段 |
抽样校验是必要投入:随机抽几十页人工比对,往往能发现批量性的解析缺陷,比逐页检查效率高得多。
解析结果里保留来源信息(文件名与页码)成本极低,但缺失它会让答案无法引用与核对,出问题时也无从回溯。