将string拆分成句子

我写了这段代码拆分一个string,并将其存储在一个string数组中: –

String[] sSentence = sResult.split("[az]\\.\\s+"); 

但是,我已经添加了[az],因为我想处理一些缩写问题。 但是,我的结果显示如下: –

此外,当埃弗里特试图指导他们的基础math,他们certificate没有反应

我看到我失去了在分割函数中指定的模式。 我可以失去这个时期,但丢失这个词的最后一个字母会扰乱它的意义。

有人可以帮我解决这个问题,另外,有人可以帮我处理缩写吗? 例如,因为我基于句点分割string,所以我不想丢失缩写。

parsing句子远不是一项简单的任务,即使对于英文这样的拉丁语言也是如此。 像你在你的问题中提出的一个天真的方法会经常失败,以至于在实践中certificate是无用的。

更好的方法是使用configuration了正确的Locale的BreakIterator 。

 BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US); String source = "This is a test. This is a TLA test. Now with a Dr. in it."; iterator.setText(source); int start = iterator.first(); for (int end = iterator.next(); end != BreakIterator.DONE; start = end, end = iterator.next()) { System.out.println(source.substring(start,end)); } 

产生以下结果:

  1. 这是一个testing。
  2. 这是一个TLAtesting。
  3. 现在有一个博士在里面。

在任何情况下都很难得到一个正则expression式,但是要解决你眼前的问题,你可以使用一个向后看:

 String sResult = "This is a test. This is a TLA test."; String[] sSentence = sResult.split("(?<=[az])\\.\\s+"); 

结果:

 This is a test This is a TLA test. 

请注意,有些缩写不以大写字母结尾,例如缩写,先生等等。还有句子不会以句号结束!

如果可以,请使用LingPipe等自然语言处理工具。 有很多微妙的东西,很难用正则expression式来捕捉,比如,( 例如 :-)), 先生缩写省略号 (…) 等等

在LingPipe网站上有一个非常简单的关于句子检测的教程。