如何将一个字符串分割成句子 - Cocoa

4
我有一个包含多个句子的NSString,我想将它拆分成一个句子的NSArray。之前有人解决过这个问题吗?我找到了enumerateSubstringsInRange:options:usingBlock:可以实现,但似乎在iPhone上不可用(仅限Snow Leopard)。我考虑根据句号来拆分字符串,但这似乎不是很稳健。

到目前为止,我最好的选择似乎是使用RegexKitLite将其正则表达式为一个句子的数组。有其他解决方案吗?


2
定义“句子”。一旦你做到了这一点,解决方案就很简单了。 - Anon.
是的,我希望其他人已经提出了一个相当健壮的句子定义。我希望站在巨人的肩膀上! - Kenny Winker
如果你看一下TeX,它会猜测句子的结尾是句号,除非它们紧跟在大写字母之后——如果不正确,你必须手动指定它是一个句号还是简单的缩写标记。 - Anon.
可能是在NSString文本块中分离完整句子的重复问题。 - Anton Belousov
5个回答

9
使用CFStringTokenizer。您需要使用kCFStringTokenizerUnitSentence选项创建分词器。

3

我会使用扫描仪进行操作,

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
我已经有一段时间没有使用它们了,但我认为可以使用NSString、NSCharacterSet和NSScanner来完成这个任务。您可以创建一个包含结束句子标点的字符集,然后调用-[NSScanner scanUpToCharactersFromSet:intoString:]方法。每次扫描将会把一个完整的句子读入一个字符串中,您可以不断调用该方法直到扫描器读完整个字符串。
当然,原始文本必须经过良好的标点处理。

0

这样怎么样:

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

这段代码将会从字符串"One. Two. Three."返回一个数组("One","Two","Three")。

“我的朋友马克博士从圣裘德大学获得了博士学位,你觉得怎么样?” - Dewayne Christensen
是的,我在发布问题后尝试了那种方法。它比仅仅扫描“。”要好一些,但效果并不明显。 - Kenny Winker

0

NSArray *sentences = [astring componentsSeparatedByCharactersInSet:[NSCharacterSet punctuationCharacterSet]];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接