Ios NLTagger:在一次过程中枚举多个类型的标记

Ios NLTagger:在一次过程中枚举多个类型的标记,ios,swift,macos,coreml,Ios,Swift,Macos,Coreml,使用这个类,我想知道是否有人可以推荐一种最简单的方法来枚举给定文本中的标记标记,但是每个标记都要有多个标记类型。例如,要枚举给定文本中的单词,请为每个单词提取(引理、词汇类别) enumerateTags()方法和关联的NLTag类似乎有限制,每个枚举只报告一个特定的标记类型。因此,我可以通过对文本进行多次传递来实现我想要的,例如,在第一次传递时拉出与给定条件匹配的字符串范围,然后在以后的传递中匹配内容。例如,我可以将所有的名词和动词用柠檬语法化,如下所示: let tagger = NLTag

使用这个类,我想知道是否有人可以推荐一种最简单的方法来枚举给定文本中的标记标记,但是每个标记都要有多个标记类型。例如,要枚举给定文本中的单词,请为每个单词提取(引理、词汇类别)

enumerateTags()方法和关联的NLTag类似乎有限制,每个枚举只报告一个特定的标记类型。因此,我可以通过对文本进行多次传递来实现我想要的,例如,在第一次传递时拉出与给定条件匹配的字符串范围,然后在以后的传递中匹配内容。例如,我可以将所有的名词和动词用柠檬语法化,如下所示:

let tagger = NLTagger(tagSchemes: [.lemma, .nameTypeOrLexicalClass])
tagger.string = //some text
let keyWordCategories: [NLTag] = [.noun, .verb]
let options: NLTagger.Options = [.omitPunctuation, .omitWhitespace, .joinNames]

// In the first pass, we're going to record which ranges are of categories we're interested in
var keywordRanges = Set<Range<String.Index>>(minimumCapacity: 200)

// First pass: which are the nouns and verbs?
tagger.enumerateTags(in: text.startIndex..<text.endIndex, unit: .word, scheme: .nameTypeOrLexicalClass, options: options) { tag, tokenRange in
    if let tag = tag {
        if (keyWordCategories.contains(tag)) {
            keywordRanges.insert(tokenRange)
        }
    }
    return true
}

// Second pass: lemmatise, filtering on just the nouns and verbs
tagger.enumerateTags(in: text.startIndex..<text.endIndex, unit: .word, scheme: .lemma, options: options) { tag, tokenRange in
    if let tag = tag {
        if (keywordRanges.contains(tokenRange)) {
            lemmas.insert(tag.rawValue)
        }
    }
    return true
}
let tagger=NLTagger(tagSchemes:[.lemma、.nameTypeOrLexicalClass])
tagger.string=//一些文本
let关键字类别:[NLTag]=[.名词,.动词]
let options:NLTagger.options=[.omit标点符号、.omit空白、.joinNames]
//在第一步中,我们将记录哪些范围是我们感兴趣的类别
var关键字范围=设置(最小容量:200)
//第一遍:哪些是名词和动词?
tagger.enumerateTags(in:text.startIndex..您可以使用它来获取具体范围内的引理,而不是遍历tagger的每个引理:

let tagger=NLTagger(tagSchemes:[.lemma、.nameTypeOrLexicalClass])
tagger.string=文本
let options:NLTagger.options=[.omit标点符号、.omit空白、.joinNames]
let关键字categories=Set(ArrayTerral:.名词,.动词)
var引理=Set()
let单位:NLTokenUnit=.word
tagger.enumerateTags(在:text.startIndex。。