BabelDOC:PDF 翻译工具如何最快跑通你的第一份双语 PDF
【免费下载链接】BabelDOCYet Another Document Translator项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC
BabelDOC 是一个 PDF 翻译工具:它保留原文版式、公式和图片位置,把英文文档翻成目标语言,并额外产出一份原文与译文对照的双语 PDF。
从 80 页英文论文说起
你拿到一份 80 页的英文论文,明天要交中文笔记。截图贴 Word,排版乱成一锅粥;丢进在线翻译器,公式位置全丢、版面像被拆开重排。BabelDOC 走的是另一条路:先解析 PDF 的结构,把每个文本段交给 LLM 翻译,再把译文嵌回原来的坐标位置,最后连公式、图片、分栏一起原样保留。最终你会拿到一份译文 PDF 和一份双语对照 PDF,版式几乎没动。
五分钟上手
环境三行要求:
- Python 3.10 以上(低于 3.14)
- Linux / macOS / Windows 都行
- 首次运行要联网,下载模型和字体
推荐用 uv 装(uv 是快速 Python 包管理器,一句话装好工具):
uv tool install --python 3.12 BabelDOC # 一行装好,装完直接能跑 babeldoc --help # 能打出帮助就算装成功了不想装工具、想从源码跑也行:
git clone https://gitcode.com/GitHub_Trending/ba/BabelDOC cd BabelDOC uv run babeldoc --help # 在项目目录里直接运行第一次翻译,只需告诉它用哪个模型、翻哪个文件:
babeldoc --openai --openai-model "gpt-4o-mini" \ --openai-base-url "https://api.openai.com/v1" \ --openai-api-key "sk-xxx" --files example.pdf跑完去输出目录(默认当前目录)找example.zh.mono.pdf:译文单语版。example.zh.dual.pdf是双语对照版。文件名带目标语言代码,默认就是zh。
它帮你解决了哪几个麻烦
版式保留:译文嵌回原位置,不重排文档
传统做法把 PDF 转成 Word 再翻译,版面基本报废。BabelDOC 内部维护一套中间表示层(可以理解为 PDF 的"结构化线稿"),记着每个文本块在哪、什么字体、什么颜色;翻译后把译文填回原坐标,放不下就自动缩字号、换行。原文、公式、图片的位置都不动。
几百页不炸内存:分片、限速、缓存三件套
长文档跑挂,多半是内存或 API 限流。三个开关管这件事:
| 参数 | 作用 | 什么时候用 |
|---|---|---|
--max-pages-per-part 50 | 把文件按页数切成小块翻译,完事自动合并 | 文档超过百页 |
--pool-max-workers 4 | 内部任务线程池大小,默认等于 QPS 值 | 内存吃紧时调小 |
--qps 4 | 每秒最多发多少次翻译请求,默认 4 | 接口限流被卡时调小 |
另外,同一句文本翻过一次就存在本地缓存里,重跑不重复花钱。
扫描版 PDF 翻译开关:白块盖原文,黑字出译文
扫描件没法直接提取文字,--ocr-workaround(OCR 补偿)就是为它准备的:在译文下方垫一块白矩形盖住原文,全部文字强制黑色,前提是你的扫描件白底黑字。不想自己判断时,用--auto-enable-ocr-workaround让程序自动检测:扫描页超过八成才开启 OCR 处理。反过来,确定是纯文本 PDF 时加--skip-scanned-detection,省掉检测环节提速。
学术论文、扫描版、批量任务怎么配
学术论文:术语表 + 表格翻译 + 无水印,一组参数搞定:
| 参数 | 值 | 说明 |
|---|---|---|
--glossary-files | ./terms.csv | CSV 两列source,target;命中术语会写进翻译提示词 |
--translate-table-text | 开 | 实验性功能,翻表格里的文字 |
--watermark-output-mode | no_watermark | 输出不带水印的译文 PDF |
术语表默认是自动提取的,加--save-auto-extracted-glossary可以把提取结果存成 CSV,下次直接复用。跑完得到的译文版式和原文一致,公式一个没少。
扫描版文档:
| 参数 | 值 | 说明 |
|---|---|---|
--ocr-workaround | 开 | 白块盖原文、强制黑字,适合白底黑字扫描件 |
--auto-enable-ocr-workaround | 开 | 不确定是不是扫描件时交给它自动判断 |
效果接近版式保留的原文,只是原文区域被译文区"接管"了。
批量任务:文件多时别堆命令行参数,写个 TOML 配置文件更清爽:
[babeldoc] files = ["/abs/path/paper1.pdf", "/abs/path/paper2.pdf"] lang-in = "en" lang-out = "zh-CN" qps = 8 max-pages-per-part = 50 glossary-files = "/abs/path/terms.csv"然后babeldoc --config config.toml一条命令跑整批。配置文件里所有参数和命令行同名,官方示例在 README 里。
排错速查:四个高频故障的修复
| 症状 | 原因 | 修复 |
|---|---|---|
babeldoc: command not found | uv tool install的路径没进 PATH;或你走的是源码安装 | 源码方式统一用uv run babeldoc ...运行 |
| 翻译到一半内存爆掉 | 大文档一次性全装进内存 | 加--max-pages-per-part 50分片处理 |
| 扫描版译文对不上位置 | 扫描件默认走文本链路,提取不到字 | 加--ocr-workaround开补偿模式 |
| 重跑同一份文件想省钱 | 缓存命中会跳过翻译 | 缓存就在~/.cache/babeldoc,清掉重跑即可 |
已知局限(来自 README):作者和参考文献区可能被合并成一段、不支持装饰线条和首字下沉、超大页面会被跳过。
下一步看什么
BabelDOC 的价值一句话:版式不动,译文原位嵌入,双语对照直接产出。术语表管住专业词,分片管住大文件,缓存管住重复花费。
- 处理原理逐阶段拆解:docs/ImplementationDetails/
- 支持的语言和代码对照:docs/supported_languages.md
- 踩到怪问题时加
--debug,中间结果会导出到~/.cache/babeldoc/working,方便定位是哪一步出的错
【免费下载链接】BabelDOCYet Another Document Translator项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考