【问题标题】:How to use borb and a Translate API to translate a PDF while maintaining formatting?如何在保持格式的同时使用 borb 和 Translate API 翻译 PDF?
【发布时间】:2021-08-22 21:52:14
【问题描述】:

我找到了borb - 一个很酷的 Python 包,用于分析和创建 PDF。

还有几个可用的翻译 API,例如Google TranslateDeepL

(我意识到翻译文本的长度可能与原始文本不同,但首先我愿意暂时忽略这一点)。

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

【问题讨论】:

    标签: pdf translation


    【解决方案1】:

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

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

    您面临的问题称为“重排内容”,即您可能会导致一行文本变长/变短。然后整个段落发生变化。并且可能段落是表格的一部分,整个表格需要改变等等。

    有几个快速技巧。

    您可以在 pdf 之上的单独层中编写新内容。 PDF 规范将此称为“可选内容组”。

    在 borb 中已经有代码可以做到这一点(与 OCR 相关的代码)。

    【讨论】:

    • 嗨 Joris,我希望你能看到这个 :-) 现在,当我想翻译 PDF 时,我在 Acrobat Pro 中打开它,然后开始一系列令人麻木的标记文本,复制文本,粘贴到 DeepL,复制翻译,粘贴翻译。是的 - 有时长度不完全正确,事情有点不对劲,但(1)几乎总是没问题(2)我可以在最后进入并修饰任何需要调整的东西。如果我可以将令人麻木的重复部分自动化,它将为我节省 95% 的时间。这个可以吗?
    • 就像我说的,您应该查看github.com/jorisschellekens/… 中的代码,它处理在现有 PDF 之上覆盖内容(在示例 OCRed 文本的情况下)。
    • 我会的。谢谢!
    • 如果您可以提供您正在使用的 pdf 文件之一,那将会很有帮助!!
    【解决方案2】:

    不幸的是,没有简单的免费或万无一失的方法来翻译 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 为每个字符提供的数据,可以确定它们在页面上的位置...对于例如,如果字符nDistance 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 文件,那将很有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多