0

我正在获取文本并将其打断 - 创建一个数组,其中每个项目都包含一个完整的句子。我决定最好的方法是使用 BreakIterator 类。这是我正在使用的代码:

theSentences = new ArrayList<String>();
String myText = aString; //the text is produced through a text box
BreakIterator boundary = BreakIterator.getSentenceInstance();
boundary.setText(myText);
int start = boundary.first();
for (int end = boundary.next();
         end != BreakIterator.DONE;
         start = end, end = boundary.next())
{
    String temp = myText.substring(start,end);
    theSentences.add(temp.trim());
}

当用户记得在句子末尾包含一个空格(大多数人都会这样做)时,这绝对可以正常工作。然而,人们在打字时确实会出错,如果他们没有在句号后加一个空格,代码似乎并没有意识到已经到了句子的结尾。我能做些什么呢?

我确实意识到我可以改用正则表达式,但似乎最好使用 BreakIterator,因为这就是它的用途。还要编写一个正则表达式来区分句号和句号的所有其他可能用途,这让我很头疼:-)

4

1 回答 1

0

很少。句子拆分不是 100% 可以完成的任务。我自己使用斯坦福 CoreNLP和 ssplit 注释器,它是管道的一部分来进行我的句子分割。对于简单的任务,这是一个你可能不想下载的巨大 jar,但它显示了这是一个多么复杂的任务。

对于句子拆分的轻量级实现,最好实现基于规则的正则表达式方法。

于 2014-01-30T19:43:12.243 回答