Skip to content

[Bug] 行末断词连字符被映射为 U+FFFE(非字符)时:默认模式静默输出坏文本("mo mentum"/"Vari ance"),未触发 OCR 兜底 #5636

Closed

Description

@dynax4u

bug_repro_sample_p7_p8_p63.pdf

Description of the bug | 错误描述

  • 环境:MinerU 4.0.12,Windows 11,CUDA,standard 档,默认 auto 解析。
  • 场景:部分出版方 PDF 生产管线(实测 某出版社电子书)会生成"页面显示正常、但隐藏文本层损坏"的 PDF。在这类文件上,默认模式会静默产出坏文本——无告警、无 OCR 兜底。损坏有两类:

A. 连字(fi/ff/ffi)字形后嵌入真实 U+0020 空格
→ 提取为 fi nancial / diff erent / profi t 等(3 页复现样本中 5 处原样进入输出)。
字符级证据:'f' 与 'i' 共享同一 bbox(同一连字字形),随后是一条真实 U+0020 字符记录,然后再是 'n'…。

B. 行末断词连字符字形被映射为 U+FFFE(Unicode 非字符)——原书全书 636 处
→ MinerU 处理行为不一致(同一份文档内):部分位置正确拼回(Ratio、recent、methodologies…),部分位置输出为内嵌空格并进入最终 md/epub(原书全量实测:mo mentum×3、Vari ance、Stan dard、de viation×2、hori zontal 等)。
几何证据:U+FFFE 字符位于行末右缘(bbox x≈375–377、半高小字形=连字符绘图位置),其后字符换行续排:'R','a', U+FFFE → 换行 't','i','o'。

可改进点(供参考,基于 4.0.12 源码目检)

  1. 原生文本路径的行末断词字符集为 - \u00ad \u2010 \u2011 \u2043(docvortex/foundation/_text.py → LINE_END_HYPHEN_CHARS),不含 U+FFFE → 行末 U+FFFE 无法进入"删字符拼接"路径,行为随之分裂;
  2. 文本层质量检测(docvortex/document/pdf/classify.py)的统计桶为 0x00 / 0xFFFD / 控制字符 / 私有区 / 无映射字形计数——未见对非字符 U+FFFE/0xFFFF 的统计 → 636 处损坏未进入任何信号,未触发已有的 OCR 兜底机制(如私有区文本触发 post-OCR 的 _should_fallback_to_post_ocr_for_private_use_text 一类逻辑)。

建议(任选或都做)

  • a) 将 U+FFFE/U+FFFF 纳入坏文本层检测信号,超阈值自动转 OCR 全局兜底——对该类文件效果最好(A 类损坏会一并被修复);
  • b) 或/并 将 U+FFFE 加入行末断词字符集,至少统一文本路径的拼接行为。

影响

语义检索基本不受影响,但逐字引用不可靠(词内空格、断词残留会进入最终 md/epub/docx),与高质量解析目标相悖。同类生产管线的文件可能成批存在(未验证影响面:仅实测 1 本)。

诚实声明:U+FFFE 来源于出版方生产管线,但"如何应对这类损坏文本层"正是本 issue 的诉求;本地已实测 OCR 路径可完全规避。

How to reproduce the bug | 如何复现

使用与当日提交的 drop cap issue 相同的 3 页最小复现样本(附件):

mineru-kit parse bug_repro_sample_p7_p8_p63.pdf -o out.md --tier standard

grep -o "fi nancial" out.md | wc -l   # 5(缺陷:连字后空格)
grep -o "financial"  out.md | wc -l   # 0
grep -o "mo mentum"  out.md | wc -l   # 1(缺陷:U+FFFE 断词残留)

对照修复(OCR 路径):

mineru-kit parse bug_repro_sample_p7_p8_p63.pdf -o out_ocr.md --tier standard --ocr-mode ocr
grep -o "fi nancial" out_ocr.md | wc -l   # 0 ✓
grep -o "financial"  out_ocr.md | wc -l   # 5 ✓(全部恢复)

📎 附件:bug_repro_sample_p7_p8_p63.pdf(3 页,从原书无损抽取)

使用建议 | Workaround

对疑似坏文本层的文档使用 --ocr-mode ocr(WebUI「强制 OCR」);实测全部修复。

Activity

  1. dynax4u commented on Oct 12, 2026

    @dynax4u
    Author

    相关 issue:#5635

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions