AWS Polly - 突出显示特殊字符
AWS Polly - Highlighting special characters
我正在使用 AWS Polly 服务进行文本转语音。但是如果文本中包含一些特殊字符,它会返回错误的开始和结束数字。
例如,如果文本是:“Böylelikle”它 returns:{“时间”:6,“类型”:“单词”,“开始”:0,“结束”:11,“值":"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
上创建一个扩展来解决这个字符数问题。
- Iterate/account 对于句子中的所有单词,因为每个前面单词的字符计数现在会影响所有后续单词的开始。
- 而且您不能相信 json 提供的
start
和 end
,因为它显然不适合 Swift 的字符串 API.
我正在使用 AWS Polly 服务进行文本转语音。但是如果文本中包含一些特殊字符,它会返回错误的开始和结束数字。
例如,如果文本是:“Böylelikle”它 returns:{“时间”:6,“类型”:“单词”,“开始”:0,“结束”:11,“值":"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
上创建一个扩展来解决这个字符数问题。 - Iterate/account 对于句子中的所有单词,因为每个前面单词的字符计数现在会影响所有后续单词的开始。
- 而且您不能相信 json 提供的
start
和end
,因为它显然不适合 Swift 的字符串 API.