长文档智能解析:让长文档不再停留在 OCR 文本层,而是进入可消费的数据层(附GitHub项目地址)
项目介绍: 这是一个面向知识库自动化的长文档智能解析工具。支持上传PDF、扫描件及手机拍照的标准、规范、制度、手册等长文档,可自动抽取目录结构、章节层级、表格、图片、图题表题及正文内容,并输出带有完整溯源信息(页码、路径、坐标)的结构化数据。具备标题层级驱动分块、表格图片独立抽取、页眉页脚过滤、跨页内容关联及原文坐标溯源能力。适用于企业知识库建设、合规检索、条款问答、技术手册入库等场景。
GitHub项目地址:https://github.com/intsig-textin/xparse-sample-projects

在企业知识库、合规检索和智能问答场景中,标准、规范、制度、手册这类长文档始终是最核心的知识资产。它们章节目录严谨、条款结构清晰,但同时也是最难被“消化”的一类材料。更麻烦的是,这些文件往往不是干净的电子版,很多来自扫描存档或老旧PDF,表格跨页、图片散落、页眉页脚干扰严重。
如果仍然靠人工整理——打开一份标准,手动切出章、节、条,再把表格和图片单独抽出来存进去,不仅效率低,而且很容易丢上下文、丢溯源信息。一个成熟的长文档解析方案,价值不在于把文档转成全文文本,而在于把结构复杂、篇幅冗长的文档整理成适合进入知识库、检索系统和下游智能应用的数据层。
1. 长文档进入知识库的难点在哪里?
标准、规范、制度、手册这类长文档,最常见的问题不是 OCR 识别率,而是“怎么切、怎么存、怎么检索”。
直接把全文 OCR 文本塞进知识库,通常会遇到下面几个问题:
结构丢失。章、节、条、附录、表格、图片之间的关系被冲平。
粒度失衡。整段太长不利于召回,切太碎又丢上下文。
噪音混入。页眉页脚、页码、侧边注释经常污染知识块。
表格和图片失联。它们常常被当成普通文本旁边的附属物,入库后很难单独使用。
难以溯源。检索命中一段内容后,用户无法快速确认它到底对应原文哪一页、哪一块。
所以这类场景的关键不是“把 PDF 变成文本”,而是“把 PDF 变成一个可检索、可回溯、可扩展的数据底座”。
2. 一条更适合长文档场景的技术路径:“文档解析 + 确定性后处理”架构
对于这类长文档,最可靠的方式通常不是一开始就让大模型接管全流程,而是先把结构层做实。
推荐链路如下:
文件上传
-> 文档解析
-> detail 级结构化结果
-> 目录构建
-> 分块
-> 媒体提取
-> 溯源映射
-> 入知识库 / 检索系统 / 后续 LLM 应用
这样做的原因很直接:
标题层级、caption 归属、页码和位置映射,本质上更适合确定性逻辑。
只要底层结构稳定,后续的摘要、问答、条款抽取、向量检索都可以在其上叠加。
如果一开始就把整条链路交给模型,基础结构不稳和模型输出不稳会叠加,系统很难调试。
换句话说,这类项目的第一目标不是“智能化”,而是“先把结构层搭准”。
3. 文档解析产品在知识库链路里的价值
对长文档入库来说,最有价值的不是 plain text,而是解析结果里的结构字段。
重点建议围绕文档解析结果中的元信息做后处理,因为这里通常会保留:
文本内容
类型信息,例如标题、正文、表格、图片
outline_levelpage_idsub_typepositionimage_url
有了这层结构化底座,你就不必从纯文本反推层级,也不必重新做一次版面理解。
对知识库场景来说,这意味着:
可以按文档结构分块,而不是只能按字数分块。
可以保留表格和图片的独立身份。
可以让每个 chunk 天然携带页码、路径和原文定位信息。
4. 长文档进入知识库的核心难点
4.1 难点一:怎么切块,决定了后续检索质量
知识库效果往往不是由 embedding 模型先决定,而是由 chunk 质量先决定。
切块太粗,召回会把大量无关内容一起带出来。
切块太细,又会丢掉条款上下文,导致问答或引用时语义不完整。
因此标准类长文档最重要的事情,往往不是选哪个向量库,而是先建立一套合理的分块策略。
4.2 难点二:文档结构很强,不能按普通段落思路处理
这类文档天然带有明确层级,例如章、节、条、款、附录等。
如果切块时忽略这些层级,后续会出现两个问题:
检索命中内容很难解释它属于哪个章节。
用户看到一段条款时,无法快速回到上级结构。
所以标准文档切块的第一原则通常是:先保留结构,再考虑长度优化。
4.3 难点三:表格、图片、caption 也是知识,不是噪音
很多标准类文档的重要信息并不在正文,而在:
表格
插图
图题
表题
如果切块时只保留正文,就会导致知识库里“召回了一段解释文字,但关键表格没带上”。
因此表格和图片更适合被独立抽成媒体单元,同时保留它们的章节路径和 caption。
4.4 难点四:知识库不是黑盒,必须能回到原文
在真实使用中,用户往往不会满足于“系统说答案在这里”,而是会追问:
这是原文哪一页
这是哪一条
这段话前后还有什么上下文
所以入库前就要把溯源能力准备好,而不是等检索系统上线后再补。
5. 分块逻辑怎么设计:一份可落地的实操指南
标准类长文档入知识库,优先做结构驱动分块。
5.1 基础思路:以`detail` 为唯一数据源
不要分别写三套逻辑去处理目录、chunk 和原文展示。
更好的方式是:
所有后处理都从
detail出发目录、chunk、media、markdown 映射都基于同一份结构生成
这样做的优势在于结果一致,容易调试,且方便扩展。
5.2 第一层分块:标题层级驱动
最推荐的基础方案是利用 outline_level 维护一个标题栈:
遍历
detail遇到标题就更新
heading_stack标题本身单独成块
正文追加到当前标题块
这一步解决的是“块属于哪个结构路径”的问题。
一个好的基础 chunk 至少应携带:
titlepathpagetexttypedetailIndices
其中 path 很重要,它决定了后续检索结果是否有上位语义。
5.3 第二层分块:表格和图片单独处理
如果当前 detail 项是表格,建议直接独立成块,不要混进正文。
如果图片前有紧邻的图题,也建议把它们作为独立媒体单元抽出。
推荐规则:
表格独立成块
表题并入表格块
图片独立成媒体项
图题作为 caption 关联
caption 必须与媒体紧邻,避免误关联
这一步解决的是“知识单元完整性”问题。
5.4 第三层分块:页眉页脚做双版本
页眉页脚是不是噪音,取决于具体场景。
例如:
做条款检索时,它通常是噪音
做原文复刻或归档时,它可能需要保留
因此推荐后端预生成两套结果:
chunkschunks_with_paratext
前端或下游系统按需选择,而不是重新 OCR。
5.5 第四层补充:为每个块保留溯源元数据
一个可入知识库的 chunk,不应只有文本。
建议至少再保留:
页码
章节路径
原始
detailIndices媒体关联关系
位置映射能力
只有这样,知识库检索命中之后,用户才能迅速回到文档证据。
6. 可以借鉴的开源切块思路
如果你准备根据自己的业务继续优化,这里有几类非常值得参考的开源思路。重点不是直接照搬,而是理解其适用边界。
6.1 标题驱动分块
这是最适合标准类文档的第一层方案。
典型思路类似很多开源框架中的 Markdown Header Splitter 或 HTML Header Splitter:先按标题层级切,再把正文挂到对应标题下面。
适用场景:
标准书
制度规范
技术手册
层级明确的长文档
建议做法是把它作为基础分块,而不是可选分块。
6.2 递归长度分块
这类思路在很多开源框架里都很常见,本质上是:
先按较强分隔符切
超长再往下细切
最终控制在目标 token 或字符长度内
它适合做第二层优化,用来解决某些章节块过长的问题。
但不建议把它当成第一层结构分块,因为它本身不理解章、节、条关系。
6.3 滑窗和重叠分块
如果你担心切块边界导致语义断裂,可以在块之间增加 overlap。
这种方法适合:
QA 场景
长条款相邻引用很多的场景
但它会带来索引膨胀和重复召回,所以更适合在结构分块之后做局部补偿,而不是全量默认开启。
6.4 语义分块
很多新的开源方案会用 embedding 相似度或句间距离来决定分块边界。
这种思路的价值在于:
能把主题连续但格式松散的段落放在一起
它更适合:
文本风格不够规范的材料
结构不明显但主题连续的文档
对于标准类文档,可以把它看成结构分块之后的补充优化,而不是替代方案。
6.5 父子块或分层检索
这是非常适合标准书场景的一种扩展方向。
做法通常是:
父块保留较完整章节上下文
子块保留较细粒度条款内容
检索时先召回子块,再回带父块上下文
这样可以兼顾召回精度和答案上下文完整性。
如果你的目标是做条款问答或合规检索,这类方案通常比单层 chunk 更稳。
7. 推荐的落地路径
如果你希望把这类文档稳定送入知识库,推荐按下面顺序推进:
先用文档解析拿到稳定
detail做标题层级驱动分块
补齐表格、图片和 caption 处理
加上页码、路径和溯源能力
再根据业务决定是否追加递归切块、滑窗或父子块策略
最后再叠加 embedding、检索和大模型问答
这个顺序的价值在于:先把知识底座做实,再优化召回和智能层。
8. 长文档智能化方案的真正价值
如果从“利用文档解析提效具体任务”的角度看,这套方案提升的是:
让长文档不再停留在 OCR 文本层,而是进入可消费的数据层。
让知识库切块从拍脑袋按字数切,升级成结构驱动切块。
让表格、图片、路径和页码都能成为知识资产的一部分。
让检索和问答结果可以回到原文证据,而不是只给一段黑盒答案。
从长远看,这类方案的意义不仅在于节省人工整理时间,更在于让标准、规范、制度这些核心知识能够以稳定、可检索、可追溯的方式进入知识库和AI应用。只有文档先被正确结构化解构,后续的智能检索、合规问答、条款比对才有真正落地的基础。
以上是一种 “文档解析 + 标题驱动分块 + 媒体独立抽取” 的长文档入库实践方案。核心思路是把标准、规范、制度等强结构文档先通过版式感知解析统一为保留标题层级、表格、图片与坐标信息的中间层,再基于标题栈生成带完整路径的文本块,同时将表格和图片独立抽出作为知识资产。方案已发布在GitHub,欢迎大家在项目中与我们交流。如果你在实际处理长文档时遇到更复杂的场景(比如多栏混排、手写批注、公式密集),或者有不同的架构思路,欢迎点击页面右侧加入技术交流群与我们探讨。
