如何识别NSString中单词的词性?

Cha*_*les 20 iphone linguistics objective-c ios

我正在处理的应用程序要求我确定一个单词的词性NSString.

所以基本上你可以在Objective C中访问一个库/数据库/类,它可以检查单个单词(以a的形式NSString)是名词,形容词,副词还是动词?

有点像:

NSString *foo="cat";

if ([foo wordIsNoun]) {
    //do something
};
Run Code Online (Sandbox Code Playgroud)

在类似但稍微不相关的注释中,是否有可能检查两个NSString包含相同词干但不同时态(问,询问,询问等)的动词是否具有相同的词干?它也非常有用.

Dav*_*ong 61

你可以这样做NSLinguisticTagger!我之前从未使用过,但我一起攻击过这个:

NSString *str = @"i have a cat";

NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:[NSArray arrayWithObject:NSLinguisticTagSchemeLexicalClass] options:~NSLinguisticTaggerOmitWords];
[tagger setString:str];
[tagger enumerateTagsInRange:NSMakeRange(0, [str length]) 
                      scheme:NSLinguisticTagSchemeLexicalClass 
                     options:~NSLinguisticTaggerOmitWords 
                  usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) {
                               NSLog(@"found: %@ (%@)", [str substringWithRange:tokenRange], tag);
                              }];
[tagger release];
Run Code Online (Sandbox Code Playgroud)

运行时,它会记录:

found: i (Pronoun)
found: have (Verb)
found: a (Determiner)
found: cat (Noun)
Run Code Online (Sandbox Code Playgroud)

但请注意,NSLinguisticTagger仅适用于iOS 5+(和Mac OS X 10.7+).

  • @DaveDeLong - 我在"iOS5 by Tutorials"一书中写了关于NSLinguisticTagger的章节,让我告诉你,在iOS5中它只适用于英语(德语和法语计划).更令人讨厌的是,对于像"我有一只猫"这样的句子,它会返回相当不错的结果,但是我使用的输入很糟糕 - 所以如果你需要100%准确的结果,不要指望它 (3认同)