iOS中的词干 – 不适用于单个词

我正在使用NSLinguisticTagger词干。 我能够在一个句子中得到一个单词词干,但是却无法得到一个单词的词干。

以下是我正在使用的代码,

  NSString *stmnt = @"i waited"; NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerJoinNames; NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:@[NSLinguisticTagSchemeLemma] options:options]; tagger.string = stmnt; [tagger enumerateTagsInRange:NSMakeRange(0, [stmnt length]) scheme:NSLinguisticTagSchemeLemma options:options usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { NSString *token = [stmnt substringWithRange:tokenRange]; NSLog(@"%@: %@", token, tag); }]; 

为此,我正确地出去了:

 i: i waited: wait 

但是如果stmnt = @"waited"; ,上面的代码就不能识别词stmnt = @"waited";

任何帮助是极大的赞赏

以下代码为我工作,

 NSString *stmt = @"waited"; NSRange stringRange = NSMakeRange(0, stmt.length); NSDictionary* languageMap = @{@"Latn" : @[@"en"]}; [stmt enumerateLinguisticTagsInRange:stringRange scheme:NSLinguisticTagSchemeLemma options:NSLinguisticTaggerOmitWhitespace orthography:[NSOrthography orthographyWithDominantScript:@"Latn" languageMap:languageMap] usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { // Log info to console for debugging purposes NSString *currentEntity = [stmt substringWithRange:tokenRange]; NSLog(@"%@ is a %@, tokenRange (%d,%d)",currentEntity,tag,tokenRange.length,tokenRange.location); }]; 

被接受的答案转换为Swift需要的人:

  let stmt = "waited" let options: NSLinguisticTaggerOptions = .OmitWhitespace let stringRange = NSMakeRange(0, stmt.length) let languageMap = ["Latn":["en"]] let orthography = NSOrthography(dominantScript: "Latn", languageMap: languageMap) stmt.enumerateLinguisticTagsInRange( stringRange, scheme: NSLinguisticTagSchemeLemma, options: options, orthography: orthography) { (tag, tokenRange, sentenceRange, _) -> () in let currentEntity = stmt.substringWithRange(tokenRange) println(">\(currentEntity):\(tag)") } 

它不适用于单个单词,因为没有足够的信息来确定它在句子中的作用。

在我们的例子中,当用户在我们的自然语言parsing器中input单个单词时,我们假定它是一个事物的名称,因此是一个名词。

所以我们只是build立一个句子,它暗示input的单词是一个名词,如下所示:

 let str = "please show me \(word)" 

然后像往常一样通过NSLinguisticTagger运行它。