获取引理词时,iOS NSLinguisticTagger始终返回null
我需要将一个关键字(它的词汇forms)与文本匹配,并返回关键字是否匹配(就像搜索引擎一样)
例如
text: I want some apples keyword: apple result: matched keyword: banana result: not matched
这是我的方法,我总是为标签获取null
- (BOOL)matchKeywordWithText:(NSString *)text keyword:(NSString *)keyword { __block NSMutableArray *words = [NSMutableArray array]; NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerJoinNames; NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes: [NSLinguisticTagger availableTagSchemesForLanguage:@"en"] options:options]; tagger.string = text; [tagger enumerateTagsInRange:NSMakeRange(0, [text length]) scheme:NSLinguisticTagSchemeLemma options:options usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { NSString *token = [text substringWithRange:tokenRange]; //TODO: TAG IS ALWAYS NULL HERE NSLog(@"words are %@: %@", token, tag); if (tag.length > 0) { [words addObject:tag]; } }]; for (NSString *word in words) { if ([word isEqualToString:keyword]) { return YES; } } return NO; }
以下代码有效:
NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:[NSArray arrayWithObjects:NSLinguisticTagSchemeNameTypeOrLexicalClass, NSLinguisticTagSchemeLemma, nil] options:(NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation)]; NSString *text = @"i'm apples"; [tagger setString:text]; [tagger enumerateTagsInRange:NSMakeRange(0, [text length]) scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass options:(NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation) usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { NSString *token = [text substringWithRange:tokenRange]; NSString *lemma = [tagger tagAtIndex:tokenRange.location scheme:NSLinguisticTagSchemeLemma tokenRange:NULL sentenceRange:NULL]; if (lemma == nil) { lemma = token; } NSLog(@"%@, %@", token, lemma); }];