如何获得单字令牌的词干形式?这是我的代码.它对某些单词有效,但对其他单词无效.

let text = "people" // works
// let text = "geese" // doesn't work
let tagger = NLTagger(tagSchemes: [.lemma])
tagger.string = text
let (tag, range) = tagger.tag(at: text.startIndex, unit: .word, scheme: .lemma)
let stemForm = tag?.rawValue ?? String(text[range])

然而,如果我对整篇文章进行词干分类,就能找到单词的所有词干形式.

let text = "This is text with plurals such as geese, people, and millennia."
let tagger = NLTagger(tagSchemes: [.lemma])
tagger.string = text

var words: [String] = []
tagger.enumerateTags(in: text.startIndex..<text.endIndex, unit: .word, scheme: .lemma, options: [.omitWhitespace, .omitPunctuation]) { tag, range in
    let stemForm = tag?.rawValue ?? String(text[range])
    words += [stemForm]
    return true
}

// this be text with plural such as goose person and millennium
words.joined(separator: " ")

另外,有没有可能逆转这个过程,找到一个词干的复数版本?

推荐答案

如果您在标记文本之前设置了文本的语言,它会起作用:

tagger.string = text
tagger.setLanguage(.english, range: text.startIndex..<text.endIndex)
let (tag, range) = tagger.tag(at: text.startIndex, unit: .word, scheme: .lemma)

在不设置语言的情况下,标记器猜测语言.显然,仅仅是"鹅"本身的信息太少了,它不能猜测它是英语.如果在没有明确设置语言的情况下勾选dominantLanguage,它显然是荷兰语.

Swift相关问答推荐

音频播放器无法播放URL音频(操作系统状态错误2003334207.)

如何在visionOS中进行购买?&# 39;购买(选项:)在visionOS中不可用

阻塞(受CPU限制的)任务的异步功能?

try 在小部件内部读取核心数据的SwiftUI总是返回空吗?

如何写一个;风格;视图修饰符,它会影响特定类型的所有嵌套视图?

使用 @resultBuilder 的通用 buildList 函数

memcpy 复制带偏移量的数组

ConfirmationDialog取消swiftui中的错误

如何自己实现同一个 iOS 16 锁屏圆形小部件?

如何在不提交到应用store 的情况下在本地运行我的应用

如何在 UITableView 中点击图片和标题

在 macOS (Swift) 上获取 BSD 驱动器名称的最佳方法是什么?

Swift 全局函数列表

将 struct 作为泛型类型传递并访问该泛型类型属性

RxSwift:share() 替代方案,保证upstream 的单一订阅

AVPlayer 在 iOS 15.4 中寻求 completionHandler 返回 false

Xcode 13.3 将函数调用更改为属性访问

如果没有标记,则为 Swift 预处理器

类型myViewController不符合 Swift 中的协议 UIPIckerDataSource

从 Swift 初始化程序调用方法