2012-02-06 9 views
20

La aplicación en la que estoy trabajando actualmente requiere que determine la parte del discurso de una palabra en NSString.¿Cómo identifico la parte del discurso de una palabra dentro de un NSString?

Básicamente, hay una biblioteca/base de datos/clase a la que puede acceder en Objective C que permite verificar si una palabra (en forma de NSString) es un sustantivo, un adjetivo, un adverbio o un verbo ?

Algo a lo largo de las líneas de:

NSString *foo="cat"; 

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

En una nota similar pero ligeramente sin relación, es posible comprobar si dos NSString verbos que contienen de la misma raíz pero diferente tensa (preguntar, preguntar, se le preguntó, etc.) tienen el mismo tallo? Sería muy útil también.

+2

um ... woa. ¿La base de datos ya está allí? ¿O estás escribiendo la herramienta de análisis de idiomas tú mismo? Esa es una tarea monstruosa, por cierto. – Almo

+4

@Almo definitivamente una tarea monstruosa ... ¡a menos que alguien ya lo haya hecho por ti! :) –

Respuesta

61

¡Puede hacerlo con NSLinguisticTagger! Nunca he usado uno antes, pero me han pirateado esto juntos:

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

Cuando se ejecuta este, registra:

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

Tenga en cuenta, sin embargo, que NSLinguisticTagger sólo está disponible en iOS 5+ (y Mac OS X 10.7+).

+1

Woah. Gracias. Hubiera apostado a que tal cosa no existía en iOS. Estoy sorprendido. –

+0

@arnauddel. sí, es bastante limpio! No he encontrado una buena razón para usarlo todavía, pero tal vez eventualmente. –

+0

Woa, genial. cinco – Almo

Cuestiones relacionadas