0
4

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