2012-02-06 9 views
20

L'app in cui sto lavorando richiede di determinare la parte di intervento di una parola in NSString.Come identifico la parte di una parola all'interno di una NSString?

Quindi in pratica esiste una libreria/database/classe a cui è possibile accedere nell'Obiettivo C che consente di verificare se una singola parola (sotto forma di NSString) è un nome, un aggettivo, un avverbio o un verbo ?

Qualcosa sulla falsariga di:

NSString *foo="cat"; 

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

Su una nota simile, ma leggermente indipendenti, è possibile controllare se due NSString contenenti verbi della stessa radice ma diversi tesa (chiedere, chiedere, chiedere, ecc) hanno lo stesso gambo? Sarebbe anche molto utile.

+2

um ... woa. Il database è già lì? O stai scrivendo lo strumento di analisi del linguaggio da solo? È un compito mostruoso, a proposito. – Almo

+4

@Almo sicuramente un compito mostruoso ... a meno che qualcuno non l'abbia già fatto per te! :) –

risposta

61

È possibile farlo con un NSLinguisticTagger! Non ho mai usato uno prima, ma ho inciso questo insieme:

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]; 

Quando si esegue questo, si registra:

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

Si noti, tuttavia, che NSLinguisticTagger è disponibile solo su iOS 5+ (e Mac OS X 10.7+).

+1

Woah. Grazie. Avrei scommesso che una cosa del genere non esistesse in iOS. Sono sorpreso. –

+0

@arnauddel. si, è abbastanza carino! Non ho trovato una buona ragione per usarlo ancora, ma forse alla fine. –

+0

Woa, cool. cinque – Almo

Problemi correlati