iphone SDK: разбить китайское предложение на слова и буквы

У меня есть китайская новостная лента, и я хочу разбить предложение на более мелкие куски для передачи в API.

Как я могу сделать это в IOS? Я установил длину символа 50 символов для английского языка.

В настоящее время я использую rangeOfString: функция, чтобы найти точку, запятую и разбить на предложение.

NSString *str  = nil, *rem = nil;

str = [final substringToIndex:MAX_CHAR_Private];
rem = [final substringFromIndex:MAX_CHAR_Private];
NSRange rng = [rem rangeOfString:@"?"];
if (rng.location == NSNotFound) {
    rng = [rem rangeOfString:@"!"];
    if (rng.location == NSNotFound) {
        rng = [rem rangeOfString:@","];
        if (rng.location == NSNotFound) {
            rng = [rem rangeOfString:@"."];
            if (rng.location == NSNotFound) {
                rng = [rem rangeOfString:@" "];
            }
        }
    }
}
if (rng.location+1 + MAX_CHAR_Private > MAXIMUM_LIMIT_Private) {
    rng = [rem rangeOfString:@" "];
}

if (rng.location == NSNotFound) {
    remaining = [[final substringFromIndex:MAX_CHAR_Private] retain];
}
else{
    //NSRange rng = [rem rangeOfString:@" "];
    str = [str stringByAppendingString:[rem substringToIndex:rng.location]];
    remaining = [[final substringFromIndex:MAX_CHAR_Private + rng.location+1] retain];
}

Это не работает правильно для китайских и японских символов.

2 ответа

Проверьте NSLinguisticTagger, он должен работать с китайским:

От Apple: "Класс NSLinguisticTagger используется для автоматического сегментирования текста на естественном языке и маркировки его информацией, такой как части речи. Он также может помечать языки, сценарии, формы слов и т. Д."

Документация Apple Справочник по классу NSLinguisticTagger

Также см. http://nshipster.com/nslinguistictagger/.

Также смотрите objc.io выпуск 7

NSString предоставляет это из коробки с опцией перечисления NSStringEnumerationBySentences:

[string enumerateSubstringsInRange:NSMakeRange(0, [string length])
                           options:NSStringEnumerationBySentences
                       usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop)
    {
        NSString *sentence = [substring stringByTrimmingCharactersInSet:whiteSpaceSet];
        // process sentence
    }
];
Другие вопросы по тегам