BabelDOC PDF翻译快速上手:三条命令装好环境,保留原版式翻出双语论文
【免费下载链接】BabelDOCYet Another Document Translator项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC
用浏览器逐段翻译英文论文、公式和双栏排版乱成一锅粥,这是PDF翻译绕不开的第一道坎。BabelDOC 是一个开源的 PDF 文档翻译工具:你丢一个带文本层的 PDF 进去,它产出保留原始版式的中文译文 PDF 和一份中英双语对照 PDF,公式、图表、字体风格尽量原样保留。
两条命令装好 BabelDOC,一条命令验证
环境要求一句话:Python 3.10~3.13(项目用 3.12 最稳),首次运行需要联网下载排版模型和字体。装与验证合并成一个小节就够了:
# 用 uv 安装(uv 是快速的 Python 包管理工具,装好后 babeldoc 命令全局可用) uv tool install --python 3.12 BabelDOC # 验证安装 babeldoc --help看不到babeldoc命令,说明 uv 的 bin 目录没进 PATH,按 uv 安装提示把它加进去即可。
如果你要改源码调试,从源码跑:
git clone https://gitcode.com/GitHub_Trending/ba/BabelDOC cd BabelDOC uv run babeldoc --help翻译走 OpenAI 兼容接口,首次翻译一篇论文的最小命令:
babeldoc --openai --openai-model "gpt-4o-mini" --openai-base-url "https://api.openai.com/v1" --openai-api-key "sk-xxx" --files example.pdf跑完后当前目录会多出两个 PDF:单语译文版和双语对照版(--no-mono/--no-dual可只留其中一种)。这一步能跑通,后面就全通了。
实战:翻一篇 20 页英文论文并输出双语版
假设你手上有一篇paper.pdf,术语表放在terms.csv(两列source,target,可加第三列tgt_lng指定语言,仓库里有样例 docs/example/demo_glossary.csv),目标输出到./out目录:
babeldoc --openai --openai-model "gpt-4o-mini" \ --openai-base-url "https://api.openai.com/v1" \ --openai-api-key "sk-xxx" \ --files paper.pdf \ --lang-in en --lang-out zh \ --pages "1-20" \ --glossary-files ./terms.csv \ --output ./out几个参数的作用,按需加:
--pages "1,2,1-,-3":只翻指定页,-表示到末尾--glossary-files:命中的术语表会随提示词一起发给模型,术语翻译更稳--qps 2:API 限流,默认 4 次/秒--max-pages-per-part 50:大文档自动拆段翻译再合并,内存紧张时救星--use-alternating-pages-dual:双语 PDF 改成交替页排布(默认是原文与译文左右并排)
参数太多记不住?直接写一个 TOML 配置文件,用--config ./config.toml加载,示例见 README.md 的 Configuration File 一节。
翻译进度会实时打印,双语 PDF 长这样:
它凭什么保住原版式:三个关键机制
解析成"中间层",而不是提取纯文本
解决什么问题:直接把文字抽出来翻译再贴回去,字号、字距、双栏位置全丢,得到的是一份"内容对、样子错"的文档。
怎么做到:BabelDOC 先把 PDF 解析成一套结构化的中间表示(IL),每个字符的位置、字体、颜色、样式都记在案上;翻译只替换其中"可翻译"的文本节点;最后再用同一套结构重新渲染出新的 PDF。整个过程解析、翻译、渲染互不耦合,插件化管线。
在哪里看:中间层代码在 babeldoc/format/pdf/document_il/,流程文档见 docs/ImplementationDetails/PDFParsing/PDFParsing.md。
布局模型先分清"谁是段落、谁是公式"
解决什么问题:段落要翻译,公式要原样保留,图片区域不能动——不先分类,翻译引擎会把公式也"翻"掉。
怎么做到:用 ONNX 推理的文档布局模型对页面做块级分类(标题、段落、表格、公式等),公式以占位符形式交给翻译接口、翻译后原样放回。模型首次使用时下载并缓存到本地。
在哪里看:布局分类实现在 babeldoc/doclayout/doclayout.py,公式与样式的处理见 docs/ImplementationDetails/StylesAndFormulas/StylesAndFormulas.md。
排版算法:译文装不进原框时的三级降档
解决什么问题:中文常常比英文长或短,译文塞不进原文段落的包围盒。
怎么做到:先在原文框内正常折行排布;装不下就先压缩行距(1.5 起,每次减 0.1,最低 1.4),再逐步缩小字号(先每次 0.05,缩到 0.6 以下改每次 0.1);还不行就沿书写方向向右扩展包围盒,但上限是页面宽度的 90%,并检查右侧有无段落或图片会被撞上。这套组合拳能把绝大多数语言的译文压回原位。
在哪里看:排版核心在 babeldoc/format/pdf/document_il/midend/typesetting.py,算法细节见 docs/ImplementationDetails/Typesetting/Typesetting.md。
最常踩的三个坑:首跑慢、版式乱、扫描件翻不了
现象:第一次翻译卡住半天没输出。原因:首次运行要联网下载排版模型和字体,大文件下载慢。解法:联网机器上先执行babeldoc --warmup只下载并校验资产再退出;完全离线的机器可用--generate-offline-assets ./dir打资产包,到目标机--restore-offline-assets恢复。
现象:个别 PDF 阅读器打开译文版式错乱。原因:PDF 清理步骤和富文本翻译与某些阅读器兼容性不佳。解法:加--enhance-compatibility(等价于--skip-clean --dual-translate-first --disable-rich-text-translate);若嫌文件变大,单独开--skip-clean也行。
现象:扫描版 PDF 翻不动或几乎无译文。原因:纯图像扫描件没有文本层,BabelDOC 的主链路依赖文本层。解法:黑字白底的扫描件用--ocr-workaround(会在原文下方垫白块强制黑字,并自动跳过扫描检测);确定文档不是扫描件时加--skip-scanned-detection提速。
什么时候用它,什么时候别用
带文本层的英文论文、技术文档要快速产出双语对照版,选它;纯扫描件、依赖连写字形(ligature)的语言、需要导出可编辑 Word 的场景,别指望它。语言支持清单见 docs/supported_languages.md,完整实现文档在 docs/ImplementationDetails/。
【免费下载链接】BabelDOCYet Another Document Translator项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考