objective-c ios cocoa mobile

objective c - Detectar el lenguaje de NSString



objective-c ios (4)

Ese es el resultado:

- (NSString *)languageForString:(NSString *) text{ if (text.length < 100) { return (NSString *) CFStringTokenizerCopyBestStringLanguage((CFStringRef)text, CFRangeMake(0, text.length)); } else { return (NSString *)CFStringTokenizerCopyBestStringLanguage((CFStringRef)text, CFRangeMake(0, 100)); } }

alguien me habló de una clase para el reconocimiento de idiomas en Cocoa. ¿Alguien sabe cuál es?

Esto no está funcionando:

NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker]; [spellChecker setAutomaticallyIdentifiesLanguages:YES]; NSString *spellCheckText = @"Guten Tag Herr Mustermann. Dies ist ein deutscher Text. Bitte löschen Sie diesen nicht."; [spellChecker checkSpellingOfString:spellCheckText startingAt:0]; NSLog(@"%@", [spellChecker language]);

El resultado es ''en'' pero debe ser ''de''.

Gracias...


Hay API en cacao disponible para verificar el idioma de una cadena, y siempre es mejor usar Foundation sobre CoreFoundation siempre que sea posible.

NSArray *tagschemes = [NSArray arrayWithObjects:NSLinguisticTagSchemeLanguage, nil]; NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:tagschemes options:0]; [tagger setString:@"Das ist ein bisschen deutscher Text. Bitte löschen Sie diesen nicht."]; NSString *language = [tagger tagAtIndex:0 scheme:NSLinguisticTagSchemeLanguage tokenRange:NULL sentenceRange:NULL];

Alternativamente, si tiene texto mixto, puede usar la API enumerateLinguisticTagsInRange para obtener el idioma de cada palabra en el texto.


Puede usar -requestCheckingOfString:… lugar. NSTextCheckingTypeOrthography intenta identificar el lenguaje utilizado en la cadena y el controlador de finalización recibe un parámetro NSOrthography que se puede utilizar para obtener información sobre la ortografía en la cadena, incluido su idioma dominante.

El siguiente ejemplo muestra el dominant language = de :

NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker]; [spellChecker setAutomaticallyIdentifiesLanguages:YES]; NSString *spellCheckText = @"Guten Herr Mustermann. Dies ist ein deutscher Text. Bitte löschen Sie diesen nicht."; [spellChecker requestCheckingOfString:spellCheckText range:(NSRange){0, [spellCheckText length]} types:NSTextCheckingTypeOrthography options:nil inSpellDocumentWithTag:0 completionHandler:^(NSInteger sequenceNumber, NSArray *results, NSOrthography *orthography, NSInteger wordCount) { NSLog(@"dominant language = %@", orthography.dominantLanguage); }];


Una extensión de cadena rápida para la respuesta de Jennifer:

extension String { func language() -> String? { let tagger = NSLinguisticTagger(tagSchemes: [NSLinguisticTagSchemeLanguage], options: 0) tagger.string = self return tagger.tagAtIndex(0, scheme: NSLinguisticTagSchemeLanguage, tokenRange: nil, sentenceRange: nil) } }

Uso:

let language = "What language is this?".language()