许多语言的单词之间都有空格,因此很容易知道何时换行。例如,在英语中,任何空格都代表换行的机会。
然而,像泰语这样的语言在单词之间有换行,但没有空格告诉你什么时候换行。
我正在使用语音转文本算法将音频转录成字符串,然后根据时间戳将其拆分为逐行字幕。对于第一组语言,这很简单,使用空格来分割标记。但我担心对于东南亚用户来说,会产生看不懂的字里行间
对于这些语言,是否有可能在一串文本中找到您可能能够打破这些行的点?我必须假设这是在 UIKit 内部以某种方式完成的,否则,泰国用户将文本放入 UILabel 会出现不正确的换行符。
请参阅下面的解释和视觉示例。
NLTokenizer
可以将文本拆分成单词。
import NaturalLanguage
let tokenizer = NLTokenizer(unit: .word)
tokenizer.setLanguage(.thai)
// or:
//tokenizer.setLanguage(.khmer)
//tokenizer.setLanguage(.lao)
//tokenizer.setLanguage(.burmese)
let text = "ทำอะไรอยู่ล่ะคุณนาย"
tokenizer.string = text
// this returns the ranges of all the words
let tokenRanges = tokenizer.tokens(for: text.startIndex..<text.endIndex)
for tokenRange in tokenRanges {
print(text[tokenRange])
}
输出:
ทำ
อะไร
อยู่
ล่ะ
คุณนาย
在您的实际代码中,您可以使用每个单词范围的上限作为“单词边界”。或者,由于您正在做字幕,因此可能更适合使用:
let lastWordRange = tokenizer.tokenRange(at: index)
在特定的
index
处获得单词范围,其中index
可能在您想要的截止点附近的某个地方,并且您在lastWordRange.upperBound
处“切断字符串”。