查找东南亚语言(泰语、高棉语、老挝语、缅甸语)中的单词边界

问题描述 投票:0回答:1

许多语言的单词之间都有空格,因此很容易知道何时换行。例如,在英语中,任何空格都代表换行的机会。

然而,像泰语这样的语言在单词之间有换行,但没有空格告诉你什么时候换行。

我正在使用语音转文本算法将音频转录成字符串,然后根据时间戳将其拆分为逐行字幕。对于第一组语言,这很简单,使用空格来分割标记。但我担心对于东南亚用户来说,会产生看不懂的字里行间

对于这些语言,是否有可能在一串文本中找到您可能能够打破这些行的点?我必须假设这是在 UIKit 内部以某种方式完成的,否则,泰国用户将文本放入 UILabel 会出现不正确的换行符。

请参阅下面的解释和视觉示例。

ios swift objective-c core-text thai
1个回答
0
投票

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
处“切断字符串”。

© www.soinside.com 2019 - 2024. All rights reserved.