把 PDF 翻译成另一种语言还不乱版?试试 BabelDOC
【免费下载链接】BabelDOCYet Another Document Translator项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC
把一份两百页的英文 PDF 交给传统翻译工具,常见结果是:文字能翻,但多栏排版塌成一栏、公式被当普通文本改写、参考文献缩进全丢。BabelDOC 是为此而生的一款开源 PDF 翻译工具,面向研究论文、技术手册等版式复杂的文档,核心思路是"先还原结构、再翻译、再按原结构重排",而不是逐行硬翻。它同时提供命令行、Python API 和在线服务三种入口,支持 100 多种语言,其中英译中的链路测试得最充分。
三步跑通第一次翻译
推荐用 uv 安装,一条命令装好:
uv tool install --python 3.12 BabelDOC babeldoc --help想从源码跑也没问题:
git clone https://gitcode.com/GitHub_Trending/ba/BabelDOC cd BabelDOC uv run babeldoc --help翻译服务默认走 OpenAI 兼容接口,把模型、地址和密钥三项配上即可。最简调用:
babeldoc --files paper.pdf --openai \ --openai-model "gpt-4o-mini" \ --openai-base-url "https://api.openai.com/v1" \ --openai-api-key "sk-xxxx"几个高频参数记一下就够了:
| 参数 | 作用 |
|---|---|
--lang-in/--lang-out | 源语言 / 目标语言,默认 en → zh |
--pages | 只翻指定页,写法如1,3,5-10 |
--output | 输出目录,默认当前目录 |
跑完后你会拿到两份 PDF:原文与译文并排的双语对照版,以及一份纯译文单语版;翻译过程还有持续的进度日志。
格式为什么能保住?
BabelDOC 的中间过程分三步:先把 PDF 解析成一套内部中间表示,提取文字块、字体、字号、颜色、对齐这些样式信息;翻译只替换文字内容,结构数据原样保留;最后由排版引擎把内容写回新 PDF。解析与重排之间的结构不经过"纯文本"形态,所以栏位、缩进、图表位置基本不会串行。
段落识别是第二道关键工序。原文里跨栏、跨页被切断的连续段落会被重新拼成一个翻译单元,译文再按版心宽度重新折行——这也是它读论文时"段落不像被机器截成碎块"的原因。公式则靠字体特征和字符模式单独圈出来,进入翻译前用占位符替换,译完再原样放回,f(x)=3x+1这类表达式不会出现在译文里变成乱码。
术语库怎么配、大文件怎么切
并发与速度。两个参数控制翻译吞吐:--qps限制对翻译接口的每秒请求数(默认 4),--pool-max-workers指定内部线程池的并发数。比如:
babeldoc --files doc.pdf --qps 10 --pool-max-workers 8 ...接口限流严就调小 qps,本地模型不限速可以适当调大。
术语一致性。术语库是 CSV 文件,三列:原文术语、目标译文、可选的目标语言代码(可参考 示例术语表):
source,target,tgt_lng API,应用程序编程接口,zh-CN microservice,微服务,zh-CN用--glossary-files glossary.csv挂上即可:翻译每一段时,系统会检查该段命中了哪些术语,命中就把对应词条写进大模型的提示词,要求它照表翻译,同一术语全文就不会出现两种译法。另外内置的自动术语抽取(默认开启)会先扫一遍文档挑出高频专业词,优先保证这些词的处理。
扫描件与大文件。扫描件分两种应对:--ocr-workaround手动开启 OCR 兜底(假设白底黑字,会在原文下垫白块再排译文);--auto-enable-ocr-workaround则让系统检测,若判定扫描件占比过半就自动接管。超过百页的文档建议用--max-pages-per-part 50切成小块逐段翻译、结束后自动合并,配合--working-dir /tmp/babeldoc指定临时目录,可明显缓解内存压力。
核心模块:三个目录看懂流水线
- PDF 解析层:pdfminer 负责从 PDF 二进制里读出字符、坐标、字体等原始信息;
- 中间层:document_il/midend 完成版面分析、段落合并、样式与公式处理,翻译结果缓存在 translator;
- 渲染层:pdf_creater 把翻译后的中间表示重新组装成最终 PDF。
参与贡献与后续路线
项目目前以维护者主导模式开发,欢迎 bug 报告(最好附上可复现的 PDF)、文档勘误和小幅兼容性修复;涉及解析、渲染、翻译逻辑的改动,建议先开 issue 讨论再提 PR。路线图上的下一站包括:表格支持、跨页跨栏段落、文档大纲生成,以及更复杂的排版能力;1.0 版本的目标是把《PDF Reference 1.7》规范文档完整翻出来,版面错误率控制在 1% 以内。
三个高频疑问
- 扫描件能翻吗?能,用前面提到的 OCR 兜底参数,适合白底黑字的扫描稿。
- 术语翻不准?优先挂术语库 CSV;默认还开着自动术语抽取兜底。
- 大文档 OOM?
--max-pages-per-part切分 +--working-dir换到空间充足的目录,通常能解决。
装好之后,先用一份你最头疼的 PDF 跑一遍--files试试,效果不理想就把样例和参数发到 issue 区。BabelDOC 的迭代很快,你的每一个复现样例,都是下一次更新提速的原因。
【免费下载链接】BabelDOCYet Another Document Translator项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考