如何解决AWS Polly - 突出显示特殊字符
我使用 AWS Polly 服务进行文本转语音。但是如果文本包含一些特殊字符,则返回错误的开始和结束编号。
例如,如果文本是:"Böylelikle",它返回:{"time":6,"type":"word","start":0,"end":11,"value":"Böylelikle" }
但它应该从0开始到10结束。
我搜索了 AWS 文档,他们说是起始值和结束值,以字节为单位的偏移量,而不是字符。
我的问题是如何将此字节值转换为字符。
我的代码是:
builder.continueOnSuccessWith { (awsTask: AWSTask<NSURL>) -> Any? in
if builder.error == nil {
if let url = awsTask.result {
do {
let txtData = try Data(contentsOf: url as URL)
if let txtString = String(data: txtData,encoding: .utf8) {
let lines = txtString.components(separatedBy: .newlines)
for line in lines {
let jsonData = Data(line.utf8)
let pollyVoiceSentence = try JSONDecoder().decode(PollyVoiceSentence.self,from: jsonData)
voiceSentences.append(pollyVoiceSentence)
}
}
} catch {
print("Could not parse TXT file")
}
}
} else {
print("ParseJSON: \(builder.error!)")
}
completionHandler(voiceSentences)
return nil
}
并突出显示单词:
let start = pollyVoiceSentence.start
var end = pollyVoiceSentence.end
let voiceRange = NSRange(location: start,length: end - start)
print("RANGE: \(voiceRange) - Word: \(pollyVoiceSentence.value)")
谢谢。
解决方法
看起来他们为您提供了 String.utf8.count
这个词。 Swift 支持 Unicode,并非所有字符都可以在 UTF8 中表示。
您可以在这里阅读官方文档 - String and Characters
在你的情况下你可以做的是 -
- 以您今天的方式解码
PollyVoiceSentence
。 - 在
PollyVoiceSentence
上创建扩展以解决此字符计数问题。 - 迭代/计算句子中的所有单词,因为每个前一个单词的字符计数现在会影响所有后续单词的开始。
- 您不能相信 json 提供的
start
和end
,因为它显然不适合 Swift 的 String API。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。