BabelDOC:PDF科学论文翻译与双语对比库
BabelDOC:PDF科学论文翻译与双语对比库
BabelDOC是一个专注于PDF科学论文翻译与双语对比的库,具备在线服务和自部署能力,并提供命令行界面与Python API 。
一、获取方式
1.1 从PyPI安装
建议使用uv工具来安装BabelDOC。首先要安装uv并设置好PATH环境变量,之后使用以下命令进行安装:
1 | |
安装完成后可通过babeldoc --help查看使用帮助,例如翻译单个PDF文件:
1 | |
如需翻译多个文件:
1 | |
1.2 从源码安装
同样推荐使用uv管理虚拟环境。先安装uv并设置环境变量,然后按以下步骤操作:
- 克隆项目:
1 | |
- 进入项目目录:
1 | |
- 安装依赖并运行:
1 | |
使用示例:
1 | |
翻译多个文件示例:
1 | |
建议使用文件的绝对路径。
二、高级选项
2.1 语言选项
--lang-in, -li:源语言代码,默认值为en。--lang-out, -lo:目标语言代码,默认值为zh。目前项目主要专注于英中翻译,其他场景未经过全面测试,2025.3.1更新后添加了对基本英文目标语言的支持。
2.2 PDF处理选项
--files:输入PDF文档的一个或多个文件路径。--pages, -p:指定要翻译的页面,如"1,2,1-,-3,3-5",不设置则翻译所有页面。--split-short-lines:强制将短行拆分为不同段落(可能导致排版问题和错误)。--short-line-split-factor:拆分阈值因子,默认值为0.8,实际阈值为当前页面所有行的中位数长度乘以该因子。--skip-clean:跳过PDF清理步骤,可能会使文件变大,但有助于提高与某些PDF阅读器的兼容性。--dual-translate-first:在双PDF模式下将翻译后的页面放在前面,默认先显示原始页面,可提升与部分PDF阅读器的兼容性。--disable-rich-text-translate:禁用富文本翻译,有助于提高与某些PDF的兼容性。--enhance-compatibility:启用所有兼容性增强选项,等同于--skip-clean --dual-translate-first --disable-rich-text-translate。--use-alternating-pages-dual:使用交替页面模式的双PDF,启用时原始页面和翻译页面交替排列,默认是并排显示。--watermark-output-mode:控制水印输出模式,'watermarked'(默认)为给翻译后的PDF添加水印,'no_watermark'为不添加水印,'both'为输出有水印和无水印两个版本。--max-pages-per-part:拆分翻译时每个部分的最大页数,不设置则不进行拆分,用于处理大文档。--no-watermark:已弃用,使用--watermark-output-mode=no_watermark替代。--translate-table-text:翻译表格文本,为实验性功能,默认False。--skip-scanned-detection:跳过扫描文档检测,默认False,在使用拆分翻译时,若不跳过则仅对第一部分进行检测,已知文档非扫描PDF时可使用此选项加速处理。
2.3 翻译服务选项
--qps:翻译服务的每秒查询次数(QPS)限制,默认值为4。--ignore-cache:忽略翻译缓存并强制重新翻译。--no-dual:不输出双语PDF文件。--no-mono:不输出单语PDF文件。--min-text-length:要翻译的最小文本长度,默认值为5。--openai:使用OpenAI进行翻译,默认False。目前仅支持OpenAI兼容的大语言模型(LLM),推荐使用与OpenAI兼容性强的模型,也可使用litellm访问多个模型。
2.3.1 OpenAI特定选项
--openai-model:使用的OpenAI模型,默认值为gpt-4o - mini。--openai-base-url:OpenAI API的基础URL。--openai-api-key:OpenAI服务的API密钥,此工具支持任何OpenAI兼容的API端点,对于本地模型如Ollama,可使用任意值作为API密钥。
2.4 输出控制
--output, -o:翻译文件的输出目录,不设置则使用当前工作目录。--debug, -d:启用调试日志级别,并在~/.cache/yadt/working中导出详细的中间结果。--report-interval:进度报告间隔,单位为秒,默认值为0.1。
2.5 离线资产管理
--generate-offline-assets:在指定目录生成离线资产包,创建一个包含所有必需模型和字体的zip文件。--restore-offline-assets:从指定文件恢复离线资产包,从先前生成的包中提取模型和字体。离线资产包适用于无网络环境或在多台机器上加速安装,生成的包名不能修改,因为文件列表哈希编码在名称中,恢复时若提供目录路径,工具会自动查找正确的离线资产包文件,包内资产完整性通过SHA3 - 256哈希验证,在空气隔绝环境部署时,需先在有网络的机器上生成包。
2.6 配置文件
可通过--config, -c指定配置文件路径,使用TOML格式。例如:
1 | |
三、Python API
在pdf2zh 2.0发布前,可暂时使用BabelDOC的Python API,但发布后建议直接使用pdf2zh的Python API,因为BabelDOC的Python API不保证兼容性,而pdf2zh的会保证一定兼容性。可参考main.py中的示例使用BabelDOC的Python API ,使用API前需调用babeldoc.high_level.init() ,且当前TranslationConfig不完全验证输入参数,需确保参数有效性。离线资产管理可使用以下函数:
1 | |
生产环境中建议预先生成资产包并包含在应用程序分发中,包验证可确保所有必需资产完整且与预期校验和匹配。
四、项目背景
当前有许多致力于简化文档编辑和翻译的项目与团队,如mathpix、Doc2X、minerU、PDFMathTranslate等,也有解决特定问题的方案,如layoutreader处理PDF文本块的阅读顺序,Surya处理PDF结构。BabelDOC希望推动一个标准的管道和接口来解决问题,PDF解析或翻译主要有两个阶段:解析(获取PDF结构,如文本块、图像、表格等)和渲染(将结构渲染成新的PDF或其他格式)。BabelDOC提供解析结果的中间表示,可渲染成新PDF或其他格式,其管道是基于插件的系统,便于添加新模型、OCR、渲染器等。
五、路线图
项目计划添加对行、表格、跨页/跨列段落的支持,实现更高级的排版功能和大纲支持等。首个1.0版本目标是完成从PDF Reference, Version 1.7到简体中文、繁体中文、日语、西班牙语的翻译,并满足布局错误小于1%、内容丢失小于1%的要求。
六、已知问题
- 作者和参考文献部分存在解析错误,翻译后会合并为一个段落。
- 不支持行。
- 不支持首字下沉。
- 大页面会被跳过。
七、如何贡献
鼓励对项目进行贡献,可查看CONTRIBUTING指南。参与项目的人员需遵循YADT行为准则,Immersive Translation为活跃贡献者提供每月Pro会员兑换码,详情见CONTRIBUTOR_REWARD.md。