Amazon Polly
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 PutLexicon 操作

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

此部分提供了示例词典以及词典存储和测试的分步说明。

注意

这些词典必须符合发音词典规范 (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. 在 us-east-2 地区,运行 put-lexicon AWS CLI 命令来存储词典(使用名称 w3c)。

    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)。

首先,让我们来测试此词典。假设您想要将以下示例文本合成到音频文件 («1»«2») (speech.mp3speech.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.

可以使用 AWS 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。如果在 调用中指定词汇符号 (先是w3c 然后是 w3cAlternate) SynthesizeSpeech 则第一个词典中定义的 W3C 的别名优先于第二个。要测试词典,请执行以下操作:

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

  2. 使用 put-lexicon AWS 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 的其他代码示例