如何使用borb和翻译API来翻译PDF,同时保持格式?



我找到了borb -一个很酷的Python包来分析和创建pdf。

并且有几个可用的翻译api,例如Google Translate和DeepL。

(我意识到翻译文本的长度可能与原始文本不同,但对于第一顺序,我现在愿意忽略它)。

但是从borb文档中我不清楚如何用它们的翻译替换所有文本,同时保持所有格式。

免责声明:我是borb的作者Joris Schellekens。

我认为替换PDF中的文本并不容易。这在PDF中通常是不可能的。

你所面临的问题被称为"回流内容",意思是你可能会使一行文本变长或变短。然后整个段落都变了。也许段落是表格的一部分,而整个表格需要改变,等等。

有几个快速的技巧。

你可以在pdf的顶部写新的内容,在一个单独的图层。PDF规范称其为"可选内容组"。

borb中已经有代码这样做了(与OCR相关的代码)。

不幸的是,没有简单的免费的或万无一失的方法来翻译pdf文档和维护文档格式。

DeepL的新Python库允许以这种方式进行完整的文档翻译:

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美元/月的基础费用+每翻译100万个字符25美元,那么DeepL API可能仍然是可行的。

编辑:在尝试使用DeepL完整文档翻译功能与中文文本后,这种方法远非万无一失/准确。至少在我研究的中文文档中,每个文档的格式差异很大,DeepL无法准确翻译各种格式的完整文档。如果您只需要文档的粗略翻译,我仍然建议使用DeepL的文档翻译器。然而,如果你需要高度的准确性,就不会有一个"简单"的方法来做到这一点(阅读答案的其余部分)。不过,我还是只在中文pdf文件中尝试过这个功能。


然而,如果您想专注于文本提取,翻译和格式化而不需要使用DeepL的完整文档翻译功能,并且能够投入一些时间来构建一个可以做到这一点的软件,我建议使用pdfplumber。虽然它有一个陡峭的学习曲线,但它是一个令人难以置信的强大的工具,它提供了pdf中每个字符的数据,图像区域信息,提供可视化调试工具,并具有表提取工具。重要的是要注意,它只适用于机器生成的pdf文件,没有OCR功能。

我处理的许多pdf都是中文的,并且有顺序排列的字符,但是使用pdfplumber提供的每个字符的数据,可以确定它们在页面上的位置…例如,如果字符nDistance of left side of character from left side of page(文档的字符属性部分)小于字符n+1的距离,并且每个字符都有相同的Distance of top of character from bottom of page,则可以合理地假设它们在同一行。

找出您通常使用的pdf正文中最典型的内容是一个漫长的过程,但是以这种方式在保持行保真度的同时执行文本提取可以以高度精确的方式完成。提取后,将字符串传递给DeepL并将其写入outfile是一项简单的任务。

如果你能提供一个你用来测试的pdf文件,那将是有帮助的!

最新更新