【问题标题】:How can I split sentences in paragraphs based on the period(.)? Using stanford parser [duplicate]如何根据句点(。)在段落中拆分句子?使用斯坦福解析器[重复]
【发布时间】:2017-09-08 23:45:50
【问题描述】:

如何根据句点 (.) 将句子分成段落? 我想使用斯坦福解析器(Java)。

例如,我有一个段落。

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

拆分后,

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

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

这些部分称为段落。

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

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

【问题讨论】:

  • 你不需要 NLP 来分割周期
  • 我只想在标记化之前使用 NLP。然后,你的意思是我应该使用 java 库。对吗?
  • 你可以使用 NLP 做你想做的事,我只是指出你不需要它来检测句点和分割文本

标签: java parsing split sentence


【解决方案1】:

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

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

“嘿,伙计们,听听这个。这件物品的价值是 123.45 美元,你猜怎么着,她付了所有的钱 一口气!那个 www.ebay.com 是一个买东西的好地方 你不觉得吗?我想我会坚持使用 www.amazon.com。我是 没有上瘾,但他们多年来一直对我很好。”

现在看上面的小段落,您可以清楚地看到其中的一些内容,在将其拆分为单个句子时显然需要考虑这些内容。我们不能只从句号 (.) 开始。我们 并不是真的要拆分货币价值和网络域,而且,我们不会将什么问题或感叹句包含在其他句子中。

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

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

您是否注意到我们在这里也使用了 String.trim() 方法?有些段落可以以制表符或空格开头,因此我们只需在执行拆分之前立即删除这些段落(以防万一)。 String.split() 方法中使用的Regular Expression(利用Positive Look-Behind)实际上并没有那么复杂,您可以使用test it here。以下是它的内容:

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

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

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

Hey folks, listen to this.  

The value of the item was $123.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.

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    相关资源
    最近更新 更多