检测NSString的语言

有人告诉我有关Cocoa语言识别的课程。 有人知道它是哪一个吗?

工作:

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

结果是'en',但应该是'de'。

谢谢…

有cocoa的API可用来检查string的语言,只要有可能,最好总是使用基于CoreFoundation的基础。

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

或者,如果碰巧混合了语言文本,则可以使用enumerateLinguisticTagsInRange API来获取文本中每个单词的语言。

那就是结果:

 - (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)); } } 

您可以使用-requestCheckingOfString:…来代替。 NSTextCheckingTypeOrthography尝试识别string中使用的语言,完成处理程序接收一个NSOrthography参数,该参数可用于获取有关string拼写的信息,包括其主要语言。

以下示例输出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); }]; 

詹妮弗答案的一个快速的string扩展:

 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) } } 

用法:

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