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 に答える