使用 PutLexicon 操作 - Amazon Polly
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 PutLexicon 操作

借助 Amazon Polly,您可以使用PutLexicon将发音词典存储在账户的特定 Amazon 区域。然后,在服务开始合成文本之前,您可以在 SynthesizeSpeech 请求中指定一个或多个已存储的词典。有关更多信息,请参阅 管理词典

本节提供示例词典以及存储和测试这些词典的 step-by-step 说明。

注意

这些词典必须符合发音词典规范 (PLS) W3C 建议。有关更多信息,请参阅 W3C 网站上的发音词典规范 (PLS) 1.0 版

示例 1:包含一个词位的词典

请考虑以下兼容 W3C PLS 的词典。

<?xml version="1.0" encoding="UTF-8"?> <lexicon version="1.0" xmlns="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd" alphabet="ipa" xml:lang="en-US"> <lexeme> <grapheme>W3C</grapheme> <alias>World Wide Web Consortium</alias> </lexeme> </lexicon>

请注意以下几点:

  • <lexicon> 元素中指定的两个属性:

    • xml:lang 属性指定应用该词典的语言代码 en-US。如果您在 SynthesizeSpeech 调用中指定的语音具有相同的语言代码 (en-US),则 Amazon Polly 可以使用此示例词典。

      注意

      您可以使用 DescribeVoices 操作以查找与语音关联的语言代码。

       

    • alphabet 属性指定了 IPA,这意味着使用国际语音字母表 (IPA) 字母表发音。IPA 是用于书写发音的字母之一。Amazon Polly 还支持拓展音标字母评估法 (X-SAMPA)。

       

  • <lexeme> 元素用于描述 <grapheme>(即单词的文本表示)和 <alias> 之间的映射。

要测试此词典,请执行以下操作:

  1. 将该词典保存为 example.pls

  2. 运行put-lexicon Amazon CLI 命令将词典(名称为w3c)存储在 us-east-2 区域。

    aws polly put-lexicon \ --name w3c \ --content file://example.pls
  3. 运行 synthesize-speech 命令以将示例文本合成为音频流 (speech.mp3),并指定可选 lexicon-name 参数。

    aws polly synthesize-speech \ --text 'W3C is a Consortium' \ --voice-id Joanna \ --output-format mp3 \ --lexicon-names="w3c" \ speech.mp3
  4. 播放生成的 speech.mp3 ,注意单词 W3C 在文本已替换为万维网联盟。

上述示例词典使用别名。未使用的词典中提到的 IPA 字母。以下词典使用带 IPA 字母 <phoneme> 元素指定语音发音。

<?xml version="1.0" encoding="UTF-8"?> <lexicon version="1.0" xmlns="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd" alphabet="ipa" xml:lang="en-US"> <lexeme> <grapheme>pecan</grapheme> <phoneme>pɪˈkɑːn</phoneme> </lexeme> </lexicon>

按照相同步骤测试此词典。请确保您指定的输入文本里有单词“pecan”(山核桃)(例如,“Pecan pie is delicious”(山核桃馅饼很好吃))。

示例 2:包含多个词位的词典

在此示例中,您在词典中指定的词素仅用于输入文本,以进行合成。考虑以下词典:

<?xml version="1.0" encoding="UTF-8"?> <lexicon version="1.0" xmlns="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd" alphabet="ipa" xml:lang="en-US"> <lexeme> <grapheme>W3C</grapheme> <alias>World Wide Web Consortium</alias> </lexeme> <lexeme> <grapheme>W3C</grapheme> <alias>WWW Consortium</alias> </lexeme> <lexeme> <grapheme>Consortium</grapheme> <alias>Community</alias> </lexeme> </lexicon>

词典指定了三个词素,其中两个词素为字素 W3C 定义了一个别名,如下所示:

  • 第一个 <lexeme> 元素定义了一个别名(万维网联盟)。

  • 第二个 <lexeme> 定义了一个替代别名 (WWW Consortium)。

Amazon Polly 使用第一个别名替换词典中的任意给定字素。

第三个 <lexeme> 为单词 Consortium 定义了一个替换词 (Community)。

首先,让我们来测试此词典。假设您想要将以下示例文本合成到音频文件 (speech.mp3),并且在 SynthesizeSpeech 的调用中指定词典。

The W3C is a Consortium

SynthesizeSpeech 首先按如下所示应用词典:

  • 根据第一个词素,单词 W3C 被修改为 World Wide Web Consortium。修改后的文本如下所示:

    The World Wide Web Consortium is a Consortium
  • 第三个词素中定义的别名仅适用于作为原始文本一部分的单词 Consortium,产生以下文本:

    The World Wide Web Consortium is a Community.

您可以使用以下方法对此 Amazon CLI 进行测试:

  1. 将该词典保存为 example.pls

  2. 在 us-east-2 地区,运行 put-lexicon 命令来存储词典 (使用名称 w3c)。

    aws polly put-lexicon \ --name w3c \ --content file://example.pls
  3. 运行 list-lexicons 命令以验证 w3c 词典在返回的词典列表中。

    aws polly list-lexicons
  4. 运行 synthesize-speech 命令以将示例文本合成为音频文件 (speech.mp3),并指定可选 lexicon-name 参数。

    aws polly synthesize-speech \ --text 'W3C is a Consortium' \ --voice-id Joanna \ --output-format mp3 \ --lexicon-names="w3c" \ speech.mp3

  5. 播放生成的 speech.mp3 文件,以验证合成语音是否反映了文本的更改。

示例 3:指定多个词典

在对 SynthesizeSpeech 的调用中,您可以指定多个词典。在这种情况下,指定的第一个词典(按照从左到右的顺序)覆盖前面的任意词典。

请考虑以下两个词典。请注意,每个词典都为同一个字素 W3C 描述了不同的别名。

  • 词典 1:w3c.pls

    <?xml version="1.0" encoding="UTF-8"?> <lexicon version="1.0" xmlns="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd" alphabet="ipa" xml:lang="en-US"> <lexeme> <grapheme>W3C</grapheme> <alias>World Wide Web Consortium</alias> </lexeme> </lexicon>
  • 词典 2:w3cAlternate.pls

    <?xml version="1.0" encoding="UTF-8"?> <lexicon version="1.0" xmlns="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd" alphabet="ipa" xml:lang="en-US"> <lexeme> <grapheme>W3C</grapheme> <alias>WWW Consortium</alias> </lexeme> </lexicon>

假设您分别将这些词典存储为 w3cw3cAlternate。如果在 SynthesizeSpeech 调用中指定词汇符号(先是 w3c 然后是 w3cAlternate),则第一个词典中定义的 W3C 的别名优先于第二个。要测试词典,请执行以下操作:

  1. 在本地将词典保存在名为 w3c.plsw3cAlternate.pls 的文件中。

  2. 使用put-lexicon Amazon CLI 命令上传这些词典。

    • 上传 w3c.pls 词典并将其存储为 w3c

      aws polly put-lexicon \ --name w3c \ --content file://w3c.pls
    • 在服务中将 w3cAlternate.pls 词典上传为 w3cAlternate

      aws polly put-lexicon \ --name w3cAlternate \ --content file://w3cAlternate.pls

  3. 运行 synthesize-speech 命令以将示例文本合成为音频流 (speech.mp3),并使用 lexicon-name 参数指定两个词典。

    aws polly synthesize-speech \ --text 'PLS is a W3C recommendation' \ --voice-id Joanna \ --output-format mp3 \ --lexicon-names '["w3c","w3cAlternative"]' \ speech.mp3
  4. 测试生成的 speech.mp3。具体如下:

    PLS is a World Wide Web Consortium recommendation

PutLexicon API 的其他代码示例