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

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

我正在使用一种语音到文本的算法将音频转录成字符串,然后根据时间戳将其拆分成逐行的字幕.对于第一组语言,这非常简单,使用空格来分割标记.但我担心,对于东南亚用户来说,它会造成令人费解的字里行间的分裂.

对于这些语言,有没有可能在一串文本中找到您可能能够拆分行的点?我不得不假设这是为UIKit内部完成的,否则,泰国用户在UILabel中输入文本时会有错误的换行符.

100

see blurb

推荐答案

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"切断了字符串".

Ios相关问答推荐

避免从CoreData加载图像列表时出现SwiftUI挂起

如何在KMM项目中处理PHPickerViewController的回调?

OBJC @selector 在另一个实现中不起作用

如何在SwiftUI中实现淡入淡出加粘标题屏幕效果

Swift UI中如何为Text提供内部填充

如何在 SwiftUI 中对表格行使用 Transferable

在 SwiftUI 中重构提取到子视图的 GeometryReader 代码

滚动 swiftUI 列表时,未调用单元格的任务修饰符.怎么修?

iOS 是否支持使用独立 .xib 文件创建的嵌套自定义子视图?

Swift如何表示单位转换的标准大气压

本月使用 iOS 的天数?

iOS 8 - 使用自定义演示关闭视图控制器后屏幕空白

将图像保存到 Documents 目录并检索邮箱附件

Swift 错误:在其自己的初始值中使用的变量

如何获取 iTunes 连接团队 ID 和团队名称?

我可以通过 UIAppearance 代理设置哪些属性?

比较没有时间分量的 NSDates

如果我的分发证书过期会怎样?

AFNetworking 发布请求

类 AMSupportURLConnectionDelegate 在两者中都实现