在句子末尾添加一个新行字符

时间:2012-05-17 15:51:07

标签: java nlp

我有一个字符串,它是一本书的一个片段(约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 (

我们非常感谢任何其他建议,以及能够实现这一目标的实际代码。

类似的问题: Here

更新

虽然我的优先级列表不高,因为我的书中并没有包含很多直接引用,也没有直接的演讲,但处理内部句子的规则也是有序的,所以来自同一个qoute的句子不会结束新线

3 个答案:

答案 0 :(得分:3)

Stanford's CoreNLP工具包有一个可以进行句子分割的类。查看更多here

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

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

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

答案 1 :(得分:1)

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

text = text.replaceAll("[^\\.]{1,}\\D\\.\\s?[^\\(]","\\.\n");

答案 2 :(得分:0)

String newline = System.getProperty("line.separator");
String yourLine = yourLine.append(newline);