AWS Polly将're-record'读为're minus record',求SSML解决方案
解决AWS Polly中're-record'被误读为“re minus record”的问题
问题根源
你已经定位到核心原因:启用globalenglish词典时,Polly会错误将连字符解析为减号,导致发音偏差。
SSML解决方案
可以通过SSML标签强制指定正确发音,绕过词典的错误映射,以下是两种可行方案:
1. 使用<phoneme>标签指定精准音标
直接给re-record标注标准音标,让Polly按照指定发音朗读,完全忽略词典的错误解析规则。
示例修改:
将文本中的re-record替换为:
<phoneme alphabet="ipa" ph="/ˌriːˈrekərd/">re-record</phoneme>
(如果需要英式发音,可替换为/ˌriːˈrekɔːd/)
对应到你的Kotlin代码中,可提前对文本做替换处理:
private fun getSignedUrl(text: String, speechRate: Int): String { val processedText = text.replace("re-record", "<phoneme alphabet=\"ipa\" ph=\"/ˌriːˈrekərd/\">re-record</phoneme>") val synthesizeSpeechPresignRequest = SynthesizeSpeechPresignRequest() .withOutputFormat(OutputFormat.Mp3) .withText("<speak><prosody rate=\"${speechRate}%\">$processedText</prosody></speak>") .withTextType("ssml") .withVoiceId(voices[speechGender].id) .withEngine(Engine.Neural) .withLexiconNames("globalenglish") return client?.getPresignedSynthesizeSpeechUrl(synthesizeSpeechPresignRequest)?.toString() ?: "" }
2. 使用<sub>标签替换为可读拆分表达
如果不需要精准音标,也可以用<sub>标签将re-record替换为Polly能正确识别的拆分形式:
<sub alias="re record">re-record</sub>
这种方法更简洁,适合对发音精度要求不高的场景。
额外建议
如果re-record在你的应用中高频出现,且你拥有globalenglish词典的编辑权限,也可以直接修改词典条目,添加该词的正确发音映射,从根源解决问题。
内容的提问来源于stack exchange,提问作者Orcun Sevsay
相关产品推荐
相关产品推荐

