检测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()