Как разбить строку на предложения какао - PullRequest
3 голосов
/ 28 января 2010

У меня есть NSString с несколькими предложениями, и я хотел бы разбить его на NSArray предложений. Кто-нибудь решил эту проблему раньше? Я нашел enumerateSubstringsInRange:options:usingBlock:, который может это сделать, но, похоже, его нет на iPhone (только Snow Leopard). Я думал о том, чтобы разбить строку по периодам, но это выглядит не очень надежно.

Пока что мой лучший вариант - использовать RegexKitLite для преобразования его в массив предложений. Решения?

Ответы [ 5 ]

9 голосов
/ 28 января 2010

Использовать CFStringTokenizer . Вы захотите создать токенизатор с опцией kCFStringTokenizerUnitSentence.

3 голосов
/ 28 января 2010

Я бы использовал для этого сканер,

NSScanner *sherLock = [NSCanner scannerWithString:yourString]; // autoreleased
NSMutableArray *theArray = [NSMutableArray array]; // autoreleased
while( ![sherLock isAtEnd] ){
   NSString *sentence = @"";
   // . + a space, your sentences probably will have that, and you
   // could try scanning for a newline \n but iam not sure your sentences
   // are seperated by it
   [sherLock scanUpToString:@". " inToString:&sentence];
   [theArray addObject:sentence];
}

Это должно сделать это, в этом могут быть небольшие ошибки, но я бы так и сделал. Вы должны искать NSScanner в документах, хотя ... вы можете встретить метод, который лучше для этой ситуации.

1 голос
/ 28 января 2010

Я не использовал их некоторое время, но думаю, что вы можете сделать это с NSString, NSCharacterSet и NSScanner. Вы создаете набор символов, содержащий пунктуацию в конце предложения, а затем вызываете -[NSScanner scanUpToCharactersFromSet:intoString:]. Каждое сканирование высасывает предложение в строку, и вы продолжаете вызывать метод, пока в сканере не заканчивается строка.

Конечно, текст должен быть хорошо акцентирован.

0 голосов
/ 04 декабря 2011

NSArray * предложений = [вяжущие компонентыSeparatedByCharactersInSet: [NSCharacterSet пунктуацияCharacterSet]];

0 голосов
/ 28 января 2010

Как насчет:

NSArray *sentences = [string componentsSeparatedByString:@". "];

Это вернет массив («Один», «Два», «Три») из строки «Один. Два. Три».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...