Как определить часть речи слова в NSString?

приложение, над которым я сейчас работаю, требует от меня определить часть речи слова в NSString.

Итак, в основном есть библиотека / база данных / класс, к которому вы можете получить доступ в Objective C, который позволяет проверить, есть ли одно слово (в виде NSString) является существительным, прилагательным, наречием или глаголом?

что-то вроде:

NSString *foo="cat";

if ([foo wordIsNoun]) {
    //do something
};

на аналогичной, но слегка несвязанной ноте можно проверить, если два NSString содержащий глаголы одного и того же стебля, но разного времени (ask, asking, asked и т. д.) имеют один и тот же стебель? Это было бы очень полезно.

1 ответов


вы можете сделать это с помощью 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];

когда вы запускаете это, он записывает:

found: i (Pronoun)
found: have (Verb)
found: a (Determiner)
found: cat (Noun)

обратите внимание, однако, что NSLinguisticTagger доступно только на iOS 5+ (и Mac OS X 10.7+).