问问题
1661 次
2 回答
1
这是我的解决方案
- (NSString *)detectLanguage {
if ([self isEmpty]) {
return nil;
}
NSString *string = nil;
// You can set a larger detect number here
if (self.length > 30) {
string = self;
} else {
NSMutableString *tempString = [NSMutableString stringWithString:self];
while (tempString.length < 30) {
[tempString appendFormat:@" %@",self];
}
string = tempString;
}
NSArray *tagschemes = [NSArray arrayWithObjects:NSLinguisticTagSchemeLanguage, nil];
NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:tagschemes options:0];
[tagger setString:string];
NSString *language = [tagger tagAtIndex:0 scheme:NSLinguisticTagSchemeLanguage tokenRange:NULL sentenceRange:NULL];
if (![language isEqualToString:@"und"]) {
return language;
}
return (__bridge NSString *)CFStringTokenizerCopyBestStringLanguage((CFStringRef)string, CFRangeMake(0, MIN(string.length,400)));
}
于 2014-05-10T02:13:59.853 回答
0
您无法以这种方式识别它....至少没有任何不错的准确性。你必须提供一个更长的字符串。
CFStringTokenizerCopyBestStringLanguage 文档说它至少需要 200-400
-> 没有更好的方法,我们也用自己的解决方案进行了尝试,它需要更多的文本来保证准确性
于 2013-01-09T08:34:55.027 回答