[bug_repro_sample_p7_p8_p63.pdf](https://github.com/user-attachments/files/33326003/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 页最小复现样本**(附件): ```bash 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 路径): ```bash 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
dynax4u commentedon Oct 12, 2026
相关 issue:#5635
fix(pdf): restore native drop caps and word boundaries
fix(pdf): remove spaces inside expanded ligature glyphs