【发布时间】:2021-08-22 21:52:14
【问题描述】:
我找到了borb - 一个很酷的 Python 包,用于分析和创建 PDF。
还有几个可用的翻译 API,例如Google Translate 和 DeepL。
(我意识到翻译文本的长度可能与原始文本不同,但首先我愿意暂时忽略这一点)。
但我从 borb 文档中不清楚如何用翻译替换所有文本,同时保持所有格式。
【问题讨论】:
标签: pdf translation
我找到了borb - 一个很酷的 Python 包,用于分析和创建 PDF。
还有几个可用的翻译 API,例如Google Translate 和 DeepL。
(我意识到翻译文本的长度可能与原始文本不同,但首先我愿意暂时忽略这一点)。
但我从 borb 文档中不清楚如何用翻译替换所有文本,同时保持所有格式。
【问题讨论】:
标签: pdf translation
免责声明:我是 borb 的作者 Joris Schellekens。
我认为替换 PDF 中的文本并不容易。这在 PDF 中通常是不可能实现的。
您面临的问题称为“重排内容”,即您可能会导致一行文本变长/变短。然后整个段落发生变化。并且可能段落是表格的一部分,整个表格需要改变等等。
有几个快速技巧。
您可以在 pdf 之上的单独层中编写新内容。 PDF 规范将此称为“可选内容组”。
在 borb 中已经有代码可以做到这一点(与 OCR 相关的代码)。
【讨论】:
不幸的是,没有简单的免费或万无一失的方法来翻译 pdf 文档和维护文档格式。
DeepL's new Python Library 允许以这种方式翻译完整的文档:
import deepl
auth_key = "YOUR_AUTH_KEY"
translator = deepl.Translator(auth_key)
translator.translate_document_from_filepath(
"path/to/original/file.pdf",
"path/to/write/translation/to.pdf",
target_lang="EN-US"
)
该公司现在提供了一个有字符限制的免费 API。如果您有一些简短的 pdf 文件要翻译,这可能是您的最佳选择。
如果您有很多更长的 pdf,并且不介意支付 $5.49/month + $25.00 per 1 million characters translated 的基数,那么 DeepL API 可能仍然是要走的路。
但是,如果您想不使用使用 DeepL 的完整文档翻译功能专注于文本提取、翻译和格式化,并且能够下沉一些实时要构建一个可以做到这一点的软件,我建议使用pdfplumber。虽然它有一个陡峭的学习曲线,但它是一个令人难以置信强大的工具,它提供关于 pdf 中每个字符的数据、图像区域信息、提供可视化调试工具,并具有表格提取工具。需要注意的是,它仅适用于机器生成的 pdf,并且没有 OCR 功能。
我处理的许多 pdf 都是普通话,并且有乱序列出的字符,但是使用 pdfplumber 为每个字符提供的数据,可以确定它们在页面上的位置...对于例如,如果字符n的Distance of left side of character from left side of page(字符属性section of the docs)小于字符n+1的距离,并且每个字符都有相同的Distance of top of character from bottom of page,那么可以合理地假设它们在同一行。
找出您通常使用的 pdf 正文中看起来最典型的内容是一个漫长的过程,但是以这种方式在保持行保真度的同时执行文本提取可以非常准确地完成。提取后,将字符串传递给 DeepL 并将它们写入 outfile 是一项简单的任务。
如果您能提供一份用于测试的 pdf 文件,那将很有帮助!
【讨论】: