4

我有一个字符串,它是一本书的片段(大约 1 章),这个字符串都是一行。我想在每个句子的末尾换行

我通过一个不那么复杂的代码解决了它

text = text.replaceAll("\\.","\\.\n"); //same for ? same for !

当然,这不会产生非常好的结果。我不需要它是完美的,但我越能做到越好。

在制作换行符之前,我至少想检查以下内容:

the word before the . is longer then 2 characters
there are no dots before the . in the same "word"
the character before the . is not a number
the character after the dot (and possibly a whitespace after that dot) is not a (

任何其他建议以及将实现它的实际代码都将不胜感激。

类似问题: 这里

更新:

虽然在我的优先级列表中并不高,因为我的书不包含很多直接引用或直接演讲,但是处理其中的句子的规则也是有序的,这样来自同一个 qoute 的句子就不会出现在新行中

4

3 回答 3

3

斯坦福的 CoreNLP工具包有一个做句子分割的类。在这里查看更多。

如果你说new DocumentPreprocessor(new StringReader(s)).iterator()wheres是一个包含文本的字符串,它会给你一个句子的迭代器。

请注意,这也会标记句子。如果您希望句子看起来像它开始的方式,您可以仅使用此输出作为拆分指南,或运行PTBTokenizer -untok命令(参见与上面相同的链接)以使每个标记化的句子再次看起来正常。

这几乎肯定会比你的规则列表更好,因为你的规则没有考虑到许多重要的情况。

于 2012-05-17T17:06:34.767 回答
1

如果我正确理解了您的要求,请尝试以下操作:

text = text.replaceAll("[^\\.]{1,}\\D\\.\\s?[^\\(]","\\.\n");
于 2012-05-17T16:17:07.690 回答
0
String newline = System.getProperty("line.separator");
String yourLine = yourLine.append(newline);
于 2012-05-17T16:07:24.987 回答