2013-09-02 2 views
2

Я пытаюсь использовать NSLinguisticTagger, чтобы изолировать глаголы в предложении, но столкнулся с проблемой, когда вывод отличается в зависимости от того, выполняется ли код в iOS или MacOS программа.NSLinguisticTagger, дающий разные выходы на Mac vs iOS

Мой код выглядит следующим образом:

NSString* text = @"The person is a 50 year old gentleman with a book who presents us with a conundrum."; 
NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerJoinNames; 
NSLinguisticTagger* tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:@[NSLinguisticTagSchemeNameTypeOrLexicalClass] 
                    options:options]; 
tagger.string = text; 
[tagger enumerateTagsInRange:NSMakeRange(0, [tagger.string length]) 
         scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass 
        options:options 
        usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { 
         NSString *token = [text substringWithRange:tokenRange]; 
         NSLog(@"%@: %@", token, tag); 
        }]; 

Запуск этого фрагмента кода в программе OSX, я правильно получить следующий результат («представляет» правильно идентифицируется как глагол):

[     AppDelegate (0x101b0bcb0)]: The: Determiner 
[     AppDelegate (0x101b0bcb0)]: person: Noun 
[     AppDelegate (0x101b0bcb0)]: is: Verb 
[     AppDelegate (0x101b0bcb0)]: a: Determiner 
[     AppDelegate (0x101b0bcb0)]: 50: Number 
[     AppDelegate (0x101b0bcb0)]: year: Noun 
[     AppDelegate (0x101b0bcb0)]: old: Adjective 
[     AppDelegate (0x101b0bcb0)]: gentleman: Noun 
[     AppDelegate (0x101b0bcb0)]: with: Preposition 
[     AppDelegate (0x101b0bcb0)]: a: Determiner 
[     AppDelegate (0x101b0bcb0)]: book: Noun 
[     AppDelegate (0x101b0bcb0)]: who: Pronoun 
[     AppDelegate (0x101b0bcb0)]: presents: Verb 
[     AppDelegate (0x101b0bcb0)]: us: Pronoun 
[     AppDelegate (0x101b0bcb0)]: with: Preposition 
[     AppDelegate (0x101b0bcb0)]: a: Determiner 
[     AppDelegate (0x101b0bcb0)]: conundrum: Noun 

Однако, тот же точный кодовый блок в программе iOS приводит к следующему выходу («представляет» неверно идентифицированные как существительное):

[      AppDelegate (0x8d2f000)]: The: Determiner 
[      AppDelegate (0x8d2f000)]: person: Noun 
[      AppDelegate (0x8d2f000)]: is: Verb 
[      AppDelegate (0x8d2f000)]: a: Determiner 
[      AppDelegate (0x8d2f000)]: 50: Number 
[      AppDelegate (0x8d2f000)]: year: Noun 
[      AppDelegate (0x8d2f000)]: old: Adjective 
[      AppDelegate (0x8d2f000)]: gentleman: Noun 
[      AppDelegate (0x8d2f000)]: with: Preposition 
[      AppDelegate (0x8d2f000)]: a: Determiner 
[      AppDelegate (0x8d2f000)]: book: Noun 
[      AppDelegate (0x8d2f000)]: who: Pronoun 
[      AppDelegate (0x8d2f000)]: presents: Noun 
[      AppDelegate (0x8d2f000)]: us: Pronoun 
[      AppDelegate (0x8d2f000)]: with: Preposition 
[      AppDelegate (0x8d2f000)]: a: Determiner 
[      AppDelegate (0x8d2f000)]: conundrum: Noun 

Кто-нибудь знает, почему я получаю различные выходы, и как я могу правильно получить программу IOS, чтобы определить подарки как глагол?

ответ

2

Теггер стохастичен, то есть он всегда вызывает ошибки. Из-за ограниченных ресурсов устройств iOS базовая языковая модель менее точная, чем в версии OS X. Если вам нужна более высокая точность, используйте парсер, основанный на правилах. Однако вам придется иметь дело с двусмысленностью.