Files
epub_bilingual_translator/doc/QA_2026-10-08.md
T

6.1 KiB
Raw Blame History

2026-10-08 QA 记录

环境:Mac mini,Python 3.14,Calibre 9.15;测试阶段依用户要求用 Luna 子 agent,未调用外部收费翻译 API。

工程验证

  • 29 项回归测试通过:标签/实体/MathML/图片/脚注往返、希腊字母 φ、占位符缺失/重复/嵌套错位、未验证 HTML、重复输出 ID、网络失败、术语别名/家族语境、断点续译、异常 HTML、列表/表格、锚点、CSS 和资源保留。
  • 仓库 input/ 的 11 本书共抽取 27,321 个单元;原文占位符还原失败 0,EPUB 往返新增结构问题 0。此项验证的是提取、格式与封装,不是全书译文质量。
  • 《To Explain the World》首次发现 15 段数学 φ 与协议分隔符冲突,改为保护原文字面 φ 后通过。
  • Luna 只读复核发现人物别名误伤 Son family,以及未校验译文静默跳过;均补充测试并修正。

真实译文样例

《Gambling Man》第 1 章连续 10 段,约 6,343 英文字符;由 Luna 子 agent 生成译文。孙正义、祖父和孙家按语境区分,脚注占位符原样保存。这是 10/1,575 个抽取单元的部分样例;没有声称该书完整翻译或所有人物别名都已覆盖。巴菲特术语有自动测试和示例配置,本轮真实书段未出现巴菲特。

本地证据保存在 .work/luna-qa/(译文和语言复核)与 .work/luna-final/(最新封装、完整覆盖清单、视觉 QA)。这些输出不提交到 Git,以避免提交书籍摘录和大文件。

视觉流程:Calibre 将测试章节转成 PDF,Poppler 生成 PNG,Codex 查看图片;源书的目录/脚注结构另由完整 EPUB 审计检查。发现原书 p.ot::first-letter 会放大中文“20 世纪”中的首个数字,已在译文样式中仅重置首字伪元素,原文保持原设计。

最终视觉复查:最新译文 PNG 共 4 页,原文对照 3 页;逐页查看后未发现中文缺字、重叠或截断,首个数字的放大已消除。原生 Calibre 阅读器已打开最新双语样例,通过目录搜索跳转至 Chapter 1: Roots;中文段落中的脚注 1 点击后显示对应注释内容。最终视觉结论仅限这些样例页,不能推广为全书译文质量合格。

CLI 主流程使用自制小 EPUB 完成无 API 冒烟验证;新增的输出预算、截断响应和串号测试也通过。真实供应商 API 的整书翻译没有在本轮调用。

目前边界

自动术语扫描依赖模型判断。完整名字和明确别名可约束;同姓人物、间接指称、未列入表的其他译名仍须语言 QA。exclude_contexts 与较长术语优先处理能减少误判,不能代替全书语义消歧。

HTML5 解析可以修复结构,不能自动判断出版者本意;特别的固定版式、复杂 SVG/脚本内容和阅读器差异仍需具体样本。正常主流程遇到新增结构错误会停止并留下报告。原书问题单独留存,不用“没有新增问题”宣称原书符合所有 EPUB 标准。

第二轮:中文缩进与标题目录同步

  • 新增标题目标映射:NAV、NCX 和明确的书内目录链接解析到原文件/锚点;章号、标题、副标题的相邻块精确绑定,各块仍各自翻译和回填。目录复用实际标题译文,不另行生成章标题。
  • 中文章号统一为“第一章”,Part 对应“第一部”。兼容数字、罗马数字和常见英文数字词,保留数字所在 span 的样式;双语模式保留原英文标题。
  • 中文正文首行缩进 2em,包括原书使用 noindent 的章首段。清除中文段落的内联 text-indent,英文段落不修改;图注、引文、注释、居中段落和标题排除。Calibre 转换产生的正文 div 也适用。
  • 41 项离线测试通过,覆盖双语/中文模式、拆分标题、NAV/NCX/书内目录的一致性、链接及层级、反复回填、内联 CSS、标题缓存上下文更新,以及标题首词 Two/I 的误判回归。
  • 第二轮 11 本书共 27,219 单元、467 个目录目标:原文格式还原失败 0,新增结构问题 0。其中 403 个目标绑定实际标题,64 个不确定目标保留独立标签翻译并记录 binding_note。多数是封面、扉页或装饰标题,仍有复杂章节结构;不声称所有书的标题已经自动同步。Empire of AI 的原有 1 项源文件问题仍记录在报告中。

Luna 样书与视觉范围

Luna 翻译了 Gambling Man 的 45 个标题单元,45/45 占位符校验通过;沿用第一轮 10 段正文,合计 55/1,582 单元。本轮没有做全书正文翻译,也没有验证实际外部 API 的整本吞吐。封面、扉页和版权这三个导航标签采用独立译文,其余目录目标均可绑定章节/部标题。

最终文件位于 .work/navigation-final-v4/:bilingual-sample.epub、target_only-sample.epub、完整 manifest,以及 qa-chapter/ 和 qa-bilingual/ 对照证据。这些局部 QA 样例不提交到 Git。

实际检查了中文版第 1–3 页、双语版第 1–4 页与相应原文页面:部标题、章号、主标题、中文首段/后续段缩进、英文 drop cap、上下标、强调与正文排列没有重叠或截断。PDF 页面是辅助视图;中文 EPUB 另外在 Calibre 9.15 阅读器中打开,确认中文目录“第一章:根源”跳转到对应章节、第一部到第五部层级保留、第一条注释弹窗内容正确。继续进入尾注页,点击第一章第 1 条尾注的返回链接,阅读器显示对应中文正文弹窗,再返回正文主视图;原锚点及返回链接正常。

脚注/尾注全文仍按原有提取策略跳过;本轮翻译的是其目录名称和目录所指的页面标题。尾注内部按章分组的标题仍可能是英文。这一范围不能误报为注释全文已译。

渲染期间有一次 Calibre PDF 进程 SIGSEGV,重新生成后的最终两组输出成功。自动报告仍为 visual_review: pending,人工/agent 观察记录单独保存为 visual-review.json;截图生成本身不表示整本视觉验收通过。

OCR、扫描页图文提取、版面中间结构与可点击目录的后续大版本方案见 doc/OCR_EPUB_ROADMAP.md。