Как определить часть речи слова в строке NSString? - PullRequest
20 голосов
/ 07 февраля 2012

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

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

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

NSString *foo="cat";

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

На похожей, но немного не связанной ноте, можно ли проверить, имеют ли два NSString, содержащие глаголы, одного и того же стебля, но разного времени (спрашивать, спрашивать, спрашивать и т. Д.), Один и тот же стебель? Это было бы очень полезно.

1 Ответ

61 голосов
/ 07 февраля 2012

Вы можете сделать это с 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 +).

...