Objective-C: NSLinguisticTagger "Nueva York" vs "Nueva York"

Acabo de empezar a jugar con NSLinguisticTagger basando mi código en este blog: NSLinguisticTagger @ NSHipster.com

 NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerJoinNames; NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes: [NSLinguisticTagger availableTagSchemesForLanguage:@"en"] options:options]; tagger.string = question; [tagger enumerateTagsInRange:NSMakeRange(0, [question length]) scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass options:options usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { NSString *token = [question substringWithRange:tokenRange]; NSLog(@"%@: %@", token, tag); }]; 

Cuando ejecuto esto con la question = @"Weekend in New York" , "New York" se label como PlaceName cual es genial. Pero cuando ejecuto esto con la question = @"Weekend in new york" , "new" se label como "Adjective" y "york" se label como PlaceName . ¿Hay alguna manera de sortear esto de tal manera que "New York" y "new york" se etiqueten como PlaceName ?

Soy totalmente nuevo en esta cosa de la lingüística.

Esto ya se mencionó en los comentarios, pero quería señalar esto de todos modos. NSLinguisticTagger cree que "Nueva York" y "Nueva York" son diferentes, porque lo son. La capital N le dice que es un nombre propio. Que yo sepa, no hay nada en NSLinguisticTagger que pueda cambiar este comportamiento.

Sin embargo, lo que puedes hacer es confiar en la autocorrección de iOS. Solo asegúrese de que el campo de text donde se está ingresando el valor tiene autocorrección habilitada, y debe corregir automáticamente "Nueva York" a "Nueva York", y ocurrencias similares. Si la autocorrección no detecta esto, intentaré search alguna otra biblioteca para el análisis lingüístico.

La autocorrección retroactiva ya está incluida en iOS (hasta cierto punto), por lo que debería ser lo suficientemente buena como para corregir "Nueva York" a "Nueva York". Si desea corregir la oración completa (es decir, "fin de semana en Nueva York" a "Fin de semana en Nueva York"), deberá implementar esa funcionalidad usted mismo. Esto no debería ser terriblemente difícil, ya que hay unas simples reglas de gramática que debe seguir, y muchas cosas serán recogidas por autocorrección.

Espero que esto ayude, hágamelo saber si necesita más información.

Tomando este tema un poco más. La capitalización correcta del nombre y el apellido es un requisito para que NSLinguisticTagger identifique los nombres.

Después de varias horas de frustración , decidí crear varias testings con mayúsculas, minúsculas y mayúsculas.

El NSLinguisticTagger tuvo resultados diferentes en casi todas las testings

Cuando el NSLinguisticTagger analiza una cadena en mayúsculas, casi todos los nombres se labeln como personalName . wtf

Fue muy frustrante

La lección que quiero compartir es que el labeldor NSLingüístico puede adivinar las tags que coloca en las palabras, pero al final es solo una evaluación gtwigtical de las palabras. La evaluación depende de construcciones de lenguaje adecuadas, como la colocación de palabras y si la palabra está en mayúscula o no.

Todavía lo estoy encontrando una class útil, pero la moraleja de esta publicación es "ser adecuado" .

Cuando analizamos el text, a veces los progtwigdores tendemos a jugar con minúsculas y minúsculas para simplificar nuestro trabajo. Todavía podemos hacer esto, pero ten en count que la palabra cubierta cambia los resultados de NSLinguisticTagger .