快速结论:该问题出现在 RAGFlow 的 Go DeepDOC 原生字符解析路径(非 OCR 路径)中:当 PDF 文本含上标/下标时,字符排序逻辑会把上标(如 I²C 中的 “2”)提到所在行文本之前。优先排查 internal/deepdoc/parser/pdf/layout/chars_boxes.go 中 CharsToBoxes 的行内字符排序(sortLineByXY)。
适用环境:Issue 已确认:Linux;本地 Go 源码构建(RAGFlow workspace 代码提交 a485a564f,基于上游 65f543a63);使用 native pdf_oxide 字符提取与进程内 DeepDOC 模型;未使用 Docker 镜像。
最快修复方案:升级到包含 PR #21399 的 main 分支。该 PR 在 CharsToBoxes 中通过 sortLineByXY 排序,使上标保留在行内原位置,并已在 an0590scv140.pdf 上验证。
注意事项:该修复在 Issue 关闭时仅验证了上述样例文档,多栏布局、其他上下标形态等完整排序策略仍需独立测试;“无需跑 OCR”这一前提只适用于走原生字符路径的文档,扫描件或纯图片 PDF 可能仍需 OCR,本 Issue 未涉及验证。
问题场景
用户通过 RAGFlow 的 Go DeepDOC 解析器解析 PDF,且走的是原生字符提取路径(native-character path),而非 OCR 识别。在解析 Holtek 的 an0590scv140.pdf(HT8 MCU I²C 应用说明)时,第 4 页图 3 的图注 图 3. I²C 时序图 输出为 2图 3. I C 时序图:上标 2 跑到了整段文字最前面,而不是夹在 I 与 C 之间。同一文档的标题和段落中也出现类似顺序错乱。字符本身并未丢失,属于纯粹的阅读顺序问题,与 OCR 召回或图形几何无关。
报错原文
[Bug]: Go DeepDOC reorders native superscripts before their surrounding text
2图 3. I C 时序图
Expected: 图 3. I2C 时序图
原因分析
Issue 正文指出,问题位于 internal/deepdoc/parser/pdf/layout/chars_boxes.go 的 GroupCharsToLines 与 CharsToBoxes 中。字符最初按垂直键(SortByTop,默认开启)排序,而归属同一行的字符在进入水平间隙切分和文本拼接之前,缺少一致的阅读顺序规则,导致上标这类垂直偏移的字符被排到行首。Issue 同时提到,包含上下标和多栏布局在内的完整排序策略应单独测试,说明该排序问题并非只影响单一文档。
环境排查
- 确认使用 Go 源码本地构建的 RAGFlow,并记录 workspace 代码提交(Issue 中为
a485a564f,基于上游65f543a63)。 - 确认解析走的是原生字符路径(native pdf_oxide 字符提取、进程内 DeepDOC 模型),而不是 OCR 路径。
- 确认
SortByTop为默认开启状态,因为该问题与该排序开关相关。 - 准备一个含上标/下标的最小测试 PDF(例如 I²C 图注),用于对照复现。
- Issue 未提供 Python、CUDA、PyTorch、显卡等版本信息,这些项与本次问题无直接关联证据。
解决步骤
- 先将代码更新到包含 PR #21399 的 main 分支;该 PR 在
CharsToBoxes中引入sortLineByXY行内排序。 - 确认
internal/deepdoc/parser/pdf/layout/chars_boxes.go中同一行字符在水平间隙切分与文本拼接之前,已按 XY 顺序重排,使上下标留在原位。 - 若无条件升级,可优先尝试:在
CharsToBoxes中为已归入同一行的字符补充稳定的行内排序(按水平位置为主、垂直位置为辅),再进入后续切分逻辑;该思路属于推测,需自行验证。 - 用
an0590scv140.pdf重新解析第 4 页图 3 图注,对比输出。 - 补充多栏文档和其他上下标样例做回归检查,因为 Issue 明确指出完整排序策略需独立测试。
验证方法
重新解析 an0590scv140.pdf 第 4 页,图 3 图注应输出为 图 3. I2C 时序图(纯文本中上标 2 保留在 I 与 C 之间)。同时检查同一文档中其他标题与段落的 I²C 文本,确认上下标不再前置,且多栏段落阅读顺序未出现新的错乱。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Question]: Auto metadata settings have no effect](https://www.chat-gpts.plus/wp-content/uploads/2026/10/13736-e2d4d4bd-768x403.jpg)
![[Bug]: MinerU PDF positions are emitted in the service's normalized bbox space instead of PDF page space](https://www.chat-gpts.plus/wp-content/uploads/2026/10/21220-cefa599c-768x403.jpg)
![[Bug]: 429 rate limit errors from OpenRouter FREE models not honored?](https://www.chat-gpts.plus/wp-content/uploads/2026/10/9035-c53fddfe-768x403.jpg)