Swift内置的CFStringTokenizer和NaturalLanguage都可以实现各种常见的自然语言分词,包括不是用空格分割单词的日语和中文。
CFStringTokenizer实现分词
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| func tokenize(text: String) -> [String] { let tokenize = CFStringTokenizerCreate(kCFAllocatorDefault, text as CFString?, CFRangeMake(0, text.count), kCFStringTokenizerUnitWord, CFLocaleCopyCurrent()) CFStringTokenizerAdvanceToNextToken(tokenize) var range = CFStringTokenizerGetCurrentTokenRange(tokenize) var keyWords : [String] = [] while range.length > 0 { let wRange = text.index(text.startIndex, offsetBy: range.location)..<text.index(text.startIndex, offsetBy: range.location + range.length) let keyWord = String(text[wRange]) keyWords.append(keyWord) CFStringTokenizerAdvanceToNextToken(tokenize) range = CFStringTokenizerGetCurrentTokenRange(tokenize) } return keyWords }
let words = tokenize(text: "越是隔离,我就越是怀念旅行。") print(words)
|
NaturalLanguage实现
NaturalLanguage是一个自然语言处理框架,获取自然语言的元数据,实现分词,分段落,分句子等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import NaturalLanguage
func tokenize (text: String) -> [String] { let tokenizer = NLTokenizer(unit: .word) tokenizer.string = text var keyWords : [String] = [] tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { tokenRange, _ in print(text[tokenRange]) keyWords.append(String(text[tokenRange])) return true } return keyWords }
let text = """ その日、人類は思い出した。 奴らに支配されていた恐怖を。鳥籠に囚われていた屈辱を。 """ let words = tokenize(text: text) print(words)
|
相关文档
CFStringTokenizer
Natural Language