ARTICLE · 1025528
文档解析与知识清洗的实操总结,附常用工具

1. 解析前先判断文件类型和文本层
文档上传后不要直接丢给某一个解析器,而是先看它是什么格式、有没有可提取的文本层、页面布局复不复杂,再决定走哪条解析路线;能直接提取文字的 PDF 走普通解析,提取不出文字的是扫描件走 OCR,双栏或多表格的走版面分析,这样才能避免用错工具导致顺序错乱或内容丢失。
2. 按复杂度选择解析工具
不同文档要用不同工具处理,简单 TXT、HTML、Word 用 Tika 或原生库就够,单栏简单 PDF 用 PyMuPDF4LLM 快速出 Markdown,双栏和复杂表格用 Docling 或 MinerU 做版面理解,扫描件用 PaddleOCR 识别后再按坐标重组段落;没有万能解析器,分级路由才是正解。
3. 表格必须保留表头和行列关系
表格最大的问题是直接转成一串文字后,大模型不知道哪个数字对应哪个职级和城市,所以解析时不仅要提取单元格内容,还要保留表头、合并单元格和行列结构,小表整表入库,大表按行拆分但每行都补上表头信息,复杂表格还要用专门模型并同时保存 JSON 或 HTML 结构。
4. 清洗只做减法,不改写原文
解析完成后要清洗重复页眉页脚、页码、水印、乱码和多余空格,但清洗不是润色,数字、否定词、时间范围和适用条件都不能为了语言流畅而改动,因为制度条款里的每个限定词都有业务含义,清洗的目标是去噪和恢复结构,不是重新创作文档。
5. 每个知识片段都要携带元数据
知识片段不能只保存正文,还必须带上文档编号、文件名、版本号、生效失效时间、页码、章节路径和权限标签,这样系统才能判断内容来自哪里、是否还有效、当前用户能不能看,缺少这些信息的片段在检索阶段无法做权限过滤,也无法在答案中给出可核对的引用来源。
6. 解析任务要异步分阶段管理
文档解析、OCR、向量化和索引构建都很耗时,不能卡在上传接口里同步完成,应该上传后立刻返回并在后台分阶段处理,每个阶段记录状态和失败原因,哪一步挂了就从哪一步继续,不必从头重来,同时用 文件ID + 版本 + 阶段 做幂等键,避免同一条消息重复消费导致重复生成片段和向量。
7. 用简单问题验证解析质量
程序不报错不代表解析正确,最直接的验证方法是挑几个你确定答案的问题去系统里搜,比如某制度中某条款的金额或某表格中某行的值,如果搜不到就说明解析或切分有问题,重点抽检表格密集页和双栏排版页,因为这两类最容易出现跨栏拼接和行列错位。
8. 资源有限时按优先级落地
如果人力时间有限,先做判断路由确保文件走对解析链,再把表格转成带表头的结构化数据,然后给每个片段补上页码、版本和权限元数据,最后把解析任务改成后台异步并加幂等机制,这四件事按顺序做,能解决异构文档解析中最容易出问题的大部分场景。
常用的工具
1、Apache Tika
官网:https://tika.apache.org
GitHub:https://github.com/apache/tika
2、PyMuPDF4LLM
文档:
https://pymupdf.readthedocs.io/en/latest/pymupdf4llm/
3、Docling
官方文档:
https://docling-project.github.io/docling/
PyPI:https://pypi.org/project/docling/
4、MinerU
GitHub:https://github.com/opendatalab/MinerU
文档:
https://github.com/opendatalab/MinerU/blob/master/docs/zh/usage/quick_usage.md
5、PaddleOCR
官网:https://www.paddleocr.ai
GitHub:https://github.com/PaddlePaddle/PaddleOCR
