如何根据句点 (.) 拆分段落中的句子?使用斯坦福解析器

How can I split sentences in paragraphs based on the period(.)? Using stanford parser

如何根据句点 (.) 拆分段落中的句子? 我想使用 Stanford Parser(Java).

比如我有一个段落

你的段落写作能力会让你成为一个完美的人。如果你看任何印刷的散文书,你会发现每一章都被分成几节,每一节的第一行都略微向右缩进。这些部分称为段落。章节、论文和其他散文作品被分成段落,以便于阅读。

拆分后,

你的段落写作能力会让你成为一个完美的人。

如果你看任何印刷的散文书,你会发现每一章都被分成几节,每节的第一行略微向右缩进。

这些部分称为段落。

章节、论文和其他散文作品被分成段落,以便于阅读。

我希望得到这个结果。 我如何使用 Stanford Parser 得到这个结果?

当您已经有了 String.split() 方法时,您不需要引入特殊的解析器来执行此操作。您只需要使用适当的 Regular Expression (RegEx) 来执行任务。

段落中的句子不能仅在其末尾包含句号。句子末尾可能有问号 (?) 或感叹号 (!)。要真正从段落中提取所有句子,您需要考虑这一点。另一件需要考虑的事情,如果句子中有一个数值恰好到达特定的小数点怎么办,例如:

"Hey folks, listen to this. The value of the item was 3.45 and guess what, she paid all of it in one shot! That www.ebay.com is a real great place to get stuff don't you think? I think I'll stick with www.amazon.com though. I'm not hooked on it but they've treated me great for years."

现在看看上面的小段落,您可以清楚地看到其中的一些内容,在将其拆分为单个句子时需要明显考虑。我们不能仅以句点 (.) 为基础。我们 真的不想拆分货币价值和网络域,而且,我们不会将什么疑问句或感叹句包含在其他句子中。

要使用 String.split() 方法将此示例段落分解为单独的句子而不损坏内容,我们可以使用此正则表达式:

String[] sentences = paragraph.trim().split("(?<=\.\s)|(?<=[?!]\s)");

你有没有注意到我们在这里也使用了String.trim()方法?有些段落可以以制表符或空格开头,因此我们只需在执行拆分之前立即删除它们(以防万一)。 Regular Expression used (which utilizes Positive Look-Behind) within the String.split() method isn't really all that complicated and you can test it here。内容如下:

如果您现在要像这样遍历名为 sentences 的字符串数组变量:

for (String sentence : sentences) {
    System.out.println(sentence + " \n");
}

您的控制台输出应该类似于:

Hey folks, listen to this.  

The value of the item was 3.45 and guess what, she paid all in one shot!  

That www.ebay.com is a real great place to get stuff don't you think?  

I think I'll stick with www.amazon.com though.  

I'm not hooked on it but they've treated me great for years.