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外部依赖
| Kind | Dependency / Endpoint |
|---|---|
| cli | pandoc |
| cli | markitdown CLI(markitdown[pdf]) |
| package | pymupdf4llm / pymupdf(uv --with 拉取) |
| cli | pdftotext / pdftoppm(poppler,校验脚本用) |
4管控建议与判定依据
- scripts/: 执行本地脚本或命令: python scripts/convert.py(本地解析+后处理)
- 外部端点: 将本地内容或会话向第三方云存储外发
- 本地工作目录: 文件读写与工件输出: -o 输出 markdown;--assets-dir 图片落盘(media/ 展平);extract_pdf_images/validate_out
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…