1实现原理 · 为什么它能做到
功能由『Pandoc 抽取 + 增值后处理』两层实现:SKILL.md 把架构一句话写死,声称价值在 8 项 DOCX 后处理而非转换本身。
**Architecture**: Pandoc (best-in-class extraction) + 8 post-processing fixes (our value-add).
工具选择被 Quick/Heavy 双模式路由:Quick 单工具快跑,Heavy 多工具并行、逐段(表格/图片/标题/列表/段落)按质量评分择优合并。
| PDF | pymupdf4llm | pymupdf4llm + markitdown |
DOCX 后处理逐类有测试背书:8 项清洗(grid/simple 表格、图片路径、pandoc 属性、CJK 加粗间距、缩进代码块、转义括号、双括号链接)在 SKILL.md 表格中与 TestPostprocessPipeline / TestCjkBoldSpacing(15 cases) 等测试一一对应。
| Grid tables (`+:---+`) | Single-column → blockquote, multi-column → pipe table | `TestPostprocessPipeline` |
PDF 后处理(2026-08-30 起)做三件事:剥 Tesseract OCR 垃圾块、跨页去重复页眉/页脚/水印行(同一条规范化行出现在 ≥60% 页面即判定)、把绝对图片路径改相对。
Repeated header/footer/watermark lines (same normalized line on ≥60% of pages, incl. diagonal watermarks) | Detected via pymupdf cross-page scan, removed from markdown; bold-wrapped and merged-with-page-number variants also caught | `TestRepeatingLines`
质量闭环由 validate_output.py 支撑:按文本/表格/图片保留率给出 Pass/Warn/Fail 阈值,并可输出 HTML 报告。
| Text Retention | >95% | 85-95% | <85% |
best-in-class(7.6/10) 声明由仓库内基准文档支撑:对 Docling/MarkItDown/Pandoc/Mammoth 逐维度打分,结论是 pandoc 底座+后处理层。
| 维度 | Docling (IBM) | MarkItDown (MS) | Pandoc | Mammoth | **doc-to-markdown(我们)** |
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | pandoc |
| cli | markitdown CLI(markitdown[pdf]) |
| package | pymupdf4llm / pymupdf(uv --with 拉取) |
| cli | pdftotext / pdftoppm(poppler,校验脚本用) |
4风险提醒 风险提醒:蓝色 · 知晓即可
- 依赖大量第三方引擎且需各自安装/拉取 — pandoc 系统级安装、pymupdf4llm/markitdown 走 uv 拉取;离线环境 Quick 模式也可能不可用,需先预置。多引擎=多版本行为漂移。
- 后处理是正则/启发式,边界情况会漏或误改 — SKILL.md 自列局限:重复段落不修、目录页被当表格、跨页表格不合并、水印字 shard 残留——文档转换无完美解,需人工 spot-check。
- 7.6/10 是内部基准自评 — benchmark 由本仓库作者执行,非独立评测;比较口径(版本/文档集)可能随时间漂移。
- 文档型输入面 — 解析不可信 docx/pdf/pptx 依赖第三方解析器,宿主应把输入当作不可信文档处理。
5第二遍独立确认
- [ok] 架构=Pandoc+8 后处理 — SKILL.md 原文与 convert.py 的 tool_map/pandoc 调用路径吻合;8 项清洗在 DOCX Post-Processing 表逐行列出。
- [ok] CJK 加粗间距规则 — 规则原文(含 CJK 即两侧补空格)在 SKILL.md 'CJK Bold Spacing — why and how' 节,测试类 TestCjkBoldSpacing 存在。
- [ok] PDF 水印剥离用 pymupdf 跨页扫描 — SKILL.md 声称 + convert.py _detect_repeating_lines 内 import pymupdf、doc=pymupdf.open(...) 属实。
- [ok] Heavy 模式并行多工具 — SKILL.md 'Run all applicable tools simultaneously' + 分 segment 评分合并准则表均在。
- [ok] 质量阈值 95/100% 等 — validate_output.py 存在 pdftotext 子进程调用,SKILL 阈值表为文档化契约。
- [ok] 7.6/10 best-in-class 声明 — references/benchmark-2026-03-22.md 含 5 工具维度评分表与 '综合最优' 结论;评分口径为内部基准、非独立第三方评测——已注明。
- [ok] 无网络外发/无凭证 — convert.py/validate_output.py/merge_outputs.py/extract_pdf_images.py 全量扫描:无 requests/urllib/http 调用点(仅测试 fixture 的 example.com 文本);无 environ 凭证读取。
- [ok] 元数据核对 — GitHub API:MIT、1385 stars、pushed 2026-09-09T12:33:29Z;本地 git HEAD == d5c4678cb5d4 == pin。
6结论
71b6589924471f21…d5c4678cb5