Java 在句子末尾添加新行字符

Java 在句子末尾添加新行字符,java,nlp,Java,Nlp,我有一根绳子,它是一本书的一部分(大约1章) 这个字符串都是一行。 我想在每句话的末尾加一行 我用一个不太复杂的密码解决了这个问题 text = text.replaceAll("\\.","\\.\n"); //same for ? same for ! 当然,这不会产生很好的结果。 我不需要这是完美的,但我可以得到更好的它更好 在创建新行字符之前,我至少要检查以下内容: the word before the . is longer then 2 characters there are

我有一根绳子,它是一本书的一部分(大约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 (
任何其他的建议,连同实际的代码,都将不胜感激

类似问题:

更新:


虽然在我的优先事项列表中排名不高,因为我的书中没有太多直接引语或直接发言,但一条规则处理那些句子中的句子也是有序的,这样来自同一个句子的句子就不会出现在新的行上

如果我正确理解了你的要求,试试这样的方法:

String newline = System.getProperty("line.separator");
String yourLine = yourLine.append(newline);
text = text.replaceAll("[^\\.]{1,}\\D\\.\\s?[^\\(]","\\.\n");
toolkit有一个进行句子切分的类。看更多

如果您说
newdocumentpreprocessor(new StringReader)).iterator()
其中
s
是包含文本的字符串,它将返回一个句子迭代器

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


这几乎肯定比你的规则列表更有效,因为你的规则不能解释很多重要的情况。

那么你的句子都不是以短词开头的吗?我希望这句话中的两个句子都可以算作句子,但它们都不能用比两个字符长的单词开头。(另外,考虑疑问句结尾的问题,也可以用一段双引号的话来讲演。)你将如何处理所有的缩写,直接演讲还是省略号?例如,一句话:“史密斯博士问:“你好吗?”,但我没有回答。。。谢谢你,那是个打字错误。我想说的是在点之前,而不是在点之后(我知道这会使一些句子不起作用。但大多数句子的结尾不是2个字符或更短的单词)。这条线索看起来很有希望:你能解释一下你的代码吗。它是否确实检查了我指定的内容。
[^\\.]{1,}\\D
匹配一个或多个字符(点除外),后跟除数字以外的任何其他字符
\\s?[^\\(]
匹配一个可能的空格,后跟除
这使得我的整个字符串都是句点。在我用\\转义句点字符之前,我遇到了这个问题。但这似乎已经准备好了…不知道问题出在哪里有任何建议谢谢如果我下载斯坦福CoreNLP 1.3.1版,它将包含斯坦福英语标记器。我现在正在下载,我我不想下载错误的文件,它是250毫巴。我一开始工作就会接受你的回答。只是想看看它有多好:)