Skip to content

v0.3.0 — PDF / HTML / Markdown 支持与长篇翻译可靠性升级

Choose a tag to compare

@BigDawnGhost BigDawnGhost released this 16 Jul 06:12
260322d

Wenyi v0.3.0

本版本进一步扩展了 Wenyi 支持的文档格式,并重点增强长篇翻译中的断点续跑、电子书内容保留、术语一致性和异常恢复能力。

新增格式支持

  • 新增 PDF 输入支持(感谢 @Jiang1312
    • 通过 MinerU 将 PDF 转换为 HTML 后进入翻译流程
    • 超过 200 页的 PDF 会自动拆分处理
    • 转换结果缓存至书籍状态目录,可在续跑时复用
    • 首次使用需要配置 MINERU_API_KEY
  • 新增 Markdown 和 HTML 输入支持
  • 新增 HTML 和 Markdown 输出格式
  • Markdown 标题层级可在解析和输出过程中保留
  • CLI 的 --format 现在支持:
    • epub
    • txt
    • html
    • markdown

PDF 支持目前以文本和 HTML 内容转换为主,效果取决于 MinerU 的转换结果。

EPUB 与 FB2 内容保留

  • EPUB 现在可以保留段内图片、换行、SVG、MathML、音视频等原子内联元素
  • 日文振假名的 <rt> 内容不再被重复送入翻译
  • 支持提取表格单元格和定义列表中的文本
  • 提升了非规范 EPUB、旧编码 EPUB 的解析容错能力
  • FB2 内嵌图片与封面可被识别并重新写入导出的 EPUB
  • 改进 FB2 编码声明和命名空间兼容性

译文文本仍会使用干净的文本结构,不强行保留可能因语序变化而错位的强调、链接或 ruby 文本标签。

翻译可靠性提升

  • 严格校验模型返回的翻译数组:
    • 必须是数组
    • 数量必须与输入一致
    • 每项必须是非空字符串
  • 批量翻译对齐失败后可逐段重试
  • 逐段重试仍失败时明确中止当前批次,避免用空字符串污染译文
  • 已成功保存的批次不会丢失,可从失败位置继续翻译
  • 改进 OpenAI 兼容接口的 JSON 模式提示,适配要求消息中显式包含 json 的服务
  • 对模型返回的术语、人物和审校结果增加类型与范围校验

更可靠的断点续跑

  • 初始化流程改为原子提交:
    • 文档解析、风格分析和上下文准备全部完成后,才将状态标记为可续跑
    • 初始化中断后重新运行会正确重试
  • 已完成和未完成的段落会沿边界重新分批
  • 修改批次大小后续跑,也不会覆盖已经完成的译文
  • 翻译进度从已有完成数量开始显示
  • PDF 转换缓存位于对应书籍的状态目录中,续跑时无需重复转换
  • 独立 QA 命令会从 manifest 恢复实际语言,不再把 auto 直接传给模型

并发与状态安全

  • 增加书籍级跨进程文件锁,避免同一本书被多个进程同时修改
  • manifest、章节状态等关键文件采用原子写入
  • 术语库写入增加事务和并发等待处理
  • 审校并发、术语抽取和章节状态保存更加稳定

术语与翻译一致性

  • 术语匹配增加 Unicode NFKC 标准化和大小写折叠
  • 改进全角、半角以及大小写差异下的术语识别
  • 加强术语抽取结果清洗,避免异常 JSON 字段破坏术语库
  • 更明确地约束敬称、人物称谓和特殊表达的全书一致性

中文标点处理

  • 跨段引号状态只在同一原始长段落的续段间传递
  • 避免缺失引号污染后续无关段落
  • 改进中英文混排和英文所有格处理
  • 翻译提示词进一步要求保留原文中的特殊标点、符号及其句内结构

CLI 与配置体验

  • 任意 CLI 命令启动时都会检查并生成默认配置文件
  • 增加输入路径、章节编号和输出格式校验
  • PDF 转换、文档解析等常见错误现在会显示更友好的提示
  • 移除未文档化的 custom provider 别名,统一使用 openai-compatible
  • 新增完整的英文 README、使用文档、配置文档和贡献指南
  • 中文文档统一整理至 docs/zh/

开发与测试

  • 新增 pytest 开发依赖组,克隆后可直接运行测试
  • 补全主要函数的文档字符串
  • 清理旧兼容代码和无效流水线逻辑
  • 当前测试结果:
    • 200 passed
    • 11 subtests passed
    • Ruff 检查通过