亚马逊AWS官方博客

使用 Amazon Translate 自动翻译PPT

Original URL: https://aws.amazon.com/cn/blogs/machine-learning/translating-presentation-files-with-amazon-translate/

 

作为身在巴西的解决方案架构师,我们经常需要将技术内容从英语翻译成其他语言。人工翻译无疑需要耗费大量时间,特别是在处理PowerPoint演示文稿时,分散在页面内各个区域的文字真的会让编辑惯了正常纯文本文档的朋友们抓狂。为了解决这个问题,我们编写了一套脚本,能够使用Amazon Translate翻译微软PowerPoint文件。本文将向大家介绍这套翻译脚本的具体工作方式。

Amazon Translate是一项基于神经网络的机器学习翻译服务,可提供快速、高质量、低成本的语言翻译功能。使用Amazon Translate时,您只需提交源语言的输入文本,即可接收到翻译为目标语言的输出文本。关于Amazon Translate所支持语种的更多详细信息,请参阅支持的语种与语言代码

我们的翻译脚本使用Python编写而成,且需要依赖开源库以解析演示文稿。

解决方案

此脚本需要传递三个参数:

  • 源语言
  • 目标语言
  • .pptx文件的文件路径

然后脚本将依次执行以下功能:

  • 解析目标文件
  • 提取文本内容
  • 为各文本调用Amazon Translate API
  • 将API返回的翻译文本结果保存为新文件

以下命令将把演示文稿中的文本由英语翻译为西班牙语:

$ python pptx-translator.py en pt example.pptx
Translating example.pptx from en to pt...
Slide 1 of 7
Slide 2 of 7
Slide 3 of 7
Slide 4 of 7
Slide 5 of 7
Slide 6 of 7
Slide 7 of 7
Saving example-pt.pptx...

为了与Amazon Translate进行交互,该脚本使用到Boto(AWS SDK for Python)。Boto提供多种配置方式,但无论如何选择,您至少需要设置AWS凭证与区域,才能向AWS正常发出请求。大家可以点击此处了解关于凭证配置的更多详细信息。

为了处理我们提供的演示文稿,该脚本还用到python-pptx,一个发布在GitHub上的开源库。在提供演示文稿路径作为输入时,该库将返回一个Presentation对象,详见以下代码:

presentation = Presentation(args.input_file_path)

Presentation对象当中包含演示文稿中的每一张幻灯片,以及各幻灯片中使用的框体图形与文本段落。您可以遍历所有段落,并为每段文本调用Amazon Translate API。Amazon Translate提供两种不同翻译处理模式实时翻译异步批处理翻译。此脚本使用实时翻译模式,这意味着在一段文本之上调用Amazon Translate,然后同步获得相应的翻译结果,具体参见以下代码:

for paragraph in shape.text_frame.paragraphs:
    for index, paragraph_run in enumerate(paragraph.runs):
        response = translate.translate_text(
                Text=paragraph_run.text,
                SourceLanguageCode=source_language_code,
                TargetLanguageCode=target_language_code,
                TerminologyNames=terminology_names)

接下来,您可以使用API返回的翻译文本替换原始文本,具体代码如下:

paragraph.runs[index].text = response.get('TranslatedText')

该脚本不仅能够替换可见的演示文稿文本,还能够替换对应注释。此外,这套脚本还提供用于更新语言标识符的字典。为了使微软PowerPoint能够检查其中的拼写正确性,您需要指定正确的语言信息,具体参见以下代码:

paragraph.runs[index].font.language_id = LANGUAGE_CODE_TO_LANGUAGE_ID[target_language_code]

除了传递文本、源语言与目标语言之外,大家还可以使用Amazon Translate提供的Custom Terminology(自定义术语)功能,此功能将帮助大家根据实际需求准确翻译各项术语。为此,我们在调用API时需要传递经过预翻译的自定义术语列表。例如,您可以对某些技术术语进行自定义,将这些术语及其对应的翻译结果添加至CSV文件当中,而后将其路径作为可选参数传递给脚本。此脚本会读取文件并将内容导入至Amazon Translate,具体参见以下代码:

with open(terminology_file_path, 'rb') as f:
    translate.import_terminology(
            Name=TERMINOLOGY_NAME,
            MergeStrategy='OVERWRITE',
            TerminologyData={'File': bytearray(f.read()), 'Format': 'CSV'})

在所有幻灯片翻译完成之后,即可使用以下代码将结果另存为新的文件:

presentation.save(output_file_path)

这套脚本非常简单,也相当实用。要获取完整的脚本代码,请参阅 GitHub repo

总结

本文介绍了一套基于脚本的自动翻译解决方案,能够使用Amazon Translate将演示文稿中的文本翻译成多种语言。关于更多详细信息,请参阅什么是Amazon Translate?

 

本篇作者

Lidio Ramalho

AWS研发与创新解决方案架构团队高级经理。立足AI/ML、机器人技术、AR/VR、物联网、卫生与区块链等领域,与客户合作构建各类创新设计原型。

Rafael Werneck

现居巴西的AWS研发解决方案架构师。此前,他曾在Amazon.com.br及Amazon RDS Performance Insights项目组中担任软件开发工程师。