我有一个字符串,它是一本书的一个片段(约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的句子不会结束新线
答案 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);