BabelDOC 实测:带公式的英文论文翻成中文,版面居然没乱
【免费下载链接】BabelDOCYet Another Document Translator项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC
BabelDOC 是一款开源 PDF 翻译工具,面向论文读者和文档处理工程师:它把 PDF 里的英文按段落拆好发给大模型,再把中文塞回原来的版面,一次给你单语和双语两种输出。
真正的痛点不是翻译,是版面 🎯
在线翻译工具能搞定大部分文字需求,但把译文粘回 PDF 后,公式错位、双栏断裂、行号对不上,这些活儿没人替你干。BabelDOC 做的事恰好在这一步:它不满足于"翻译",而是把整页重新排一遍。原文的字体、换行、图表位置都尽量保留,中文嵌进原本的框里。
安装只需一行:uv tool install BabelDOC(或者pip install BabelDOC),要求 Python 3.10 到 3.13,翻译端点用任何 OpenAI 兼容 API 都行。
从安装到看到双语版,5 分钟 🚀
uv tool install BabelDOC babeldoc --files paper.pdf --openai \ --openai-model gpt-4o-mini --openai-base-url https://api.openai.com/v1 --openai-api-key sk-xxx跑完后,输出目录里多出两份 PDF:单语版是纯中文内容,双语版原文和译文并排,方便逐页对照。第一次运行会下载本地布局模型和字体资产,所以头几分钟网速会被占满;想提前预热,可以单独跑一次--warmup。注意默认输出带水印,怎么去掉后面会说。
它怎么做到:解析、分类、翻译、排版 🧠
整条链路先要把 PDF 变成一份结构化的"中间层",后面所有环节都基于它。四个环节分工很清:
- 解析:用 pdfminer 和 pymupdf 逐行提取文本、字体、颜色(实现在
babeldoc/format/pdf/下); - 版面分类:本地跑 ONNX 的 DocLayout 模型,标出哪块是段落、哪块是图表;
- 翻译:按段落送 LLM,公式和代码先换成占位符,模型碰不到也改不了(
babeldoc/translator/); - 排版:根据译文长短自动调字号和换行,最后写回新的 PDF。
前两步在本地完成"看懂文档",LLM 只负责字面翻译。公式被占位符保护,所以排版还原度比"截图再 OCR"的路子稳得多。
三个场景,装好就能试 📄
带公式的论文怎么翻
场景:arXiv 论文,行间公式和行内下标一大片。关键参数:--formular-font-pattern告诉工具公式用的字体(很多模板是 Times New Roman),这些字符段会被当成公式保护起来。
babeldoc --files paper.pdf --openai --openai-api-key sk-xxx \ --formular-font-pattern "Times New Roman"预期效果:公式留在原位、字号样式不变,正文中文填满原框架;如果按字体识别不准,还可以换--formular-char-pattern按字符集兜底。
扫描件怎么救
场景:纯扫描的旧文献,没有文本层,普通工具直接没戏。关键参数:--ocr-workaround会在译文下方垫白底遮住原文,前提是黑字白底。
babeldoc --files scan.pdf --openai --openai-api-key sk-xxx --ocr-workaround预期效果:中文叠印在扫描件上直接可读。拿不准文件是不是扫描件就别管,内置检测会自动处理。
50 份合同批量过
场景:一批同类合同,每份几十页,逐份跑太慢。关键参数:--files重复传即可一次提交多份文件;--max-pages-per-part 50把大文件拆成 50 页一段处理、译完自动拼回,内存不会一路飙。合同术语要求统一时,顺手加--glossary-files传一份 CSV 术语表。
babeldoc --files c1.pdf --files c2.pdf -o ./out \ --max-pages-per-part 50 --watermark-output-mode no_watermark预期效果:每份文件各出一组 PDF,且这一句顺带把水印去掉了。
进阶旋钮:四个值得知道的 🎛
| 参数 | 什么时候需要调它 |
|---|---|
--custom-system-prompt | 要控制翻译风格,或给 Qwen3 系模型追加/no_think指令时 |
--formular-font-pattern/--formular-char-pattern | 默认字体覆盖不了公式、或想按字符集识别公式时 |
--primary-font-family | 不满意工具给译文自动挑的字体,可强制 serif / sans-serif / script |
--use-alternating-pages-dual | 并排双语太挤,想改成"一页原文一页译文"交替排 |
--qps/--pool-max-workers | API 限流了就调低,想跑快一点就调高 |
参数多的话可以写进 TOML 配置文件,用--config加载,命令行就不用记那么长。
卡住了先看这三处 🩹
- 译文 PDF 在某些阅读器里显示不全→ 默认的清理和富文本流程兼容性不足,加
--enhance-compatibility一次打开一组兼容开关。 - 几百页文件内存爆掉、进程被杀→
--max-pages-per-part 50分段处理,译一段释放一段。 - 输出里带着不要的水印→ 默认就是带水印的,改成
--watermark-output-mode no_watermark。
更难查的问题用--debug跑一遍,中间产物会导出到~/.cache/babeldoc/working,从版面分类到排版每一步的产物都能看到。另外 BabelDOC 的 PDF 翻译带缓存,同一份文档反复调试不必每次都重调 API;确认要重翻时再加--ignore-cache。
延伸阅读 🔖
- 解析与版面实现细节:适合想搞懂 BabelDOC 如何"读懂" PDF 的中间层设计的人。
- 排版实现细节:适合关心"版面为什么没乱"的人,字号和换行的判断逻辑都在这里。
- 术语表演示文件:
--glossary-files可直接套用的 CSV 模板,适合需要统一术语译法的团队。
【免费下载链接】BabelDOCYet Another Document Translator项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考