我正在取一个文本并打破它的句子 - 创建一个包含完整句子的每个项目的数组。我认为最好的方法是使用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,因为这就是它的用途。编写正则表达式来区分句号和句点的所有其他可能用途会让我头疼: - )
答案 0 :(得分:0)
很少。句子分裂不是100%可完成的任务。我自己使用Stanford CoreNLP和ssplit注释器,它是管道的一部分,用于我的句子分割。对于简单的任务,这是一个你可能不想下载的巨大jar,但它显示了这个任务有多复杂。
对于句子拆分的轻量级实现,最好实现基于规则的正则表达式方法。