在句子级别上,在Java中分割没有标点符号的文本的最佳方法是什么?
文本可能包含多个没有标点符号的句子,例如:
String text = "i ate cornflakes it is a sunny day i have to wash my car";
String[] sentences = splitOnSentenceLevel(text);
System.out.print(Arrays.toString(sentences));
>>>["i ate cornflakes", "it is a sunny day", "i have to wash my car"]
我能找到的唯一解决方案是训练一个n-gram模型,该模型告诉每个位置作为句子结尾的概率,训练有间断的文本数据。但设置它似乎是一项艰巨的任务。
public String[] splitOnSentenceLevel(String text) {
List<String> sentences = new ArrayList<String>();
String currentSentence = "";
for(String word: text.split(" ")) {
currentSentence += " " + word;
if(nGramClassifierIsLastWordOfSentence(word)) {
sentences.add(currentSentence);
currentSentence = "";
}
}
String[] sentencesArray = new String[ sentences.size() ];
sentences.toArray( sentencesArray );
return sentencesArray;
}
斯坦福CoreNLP工具包似乎也没有这样的功能。这个任务显然是模棱两可的,但有一种更简单的方法来至少逼近解决方案吗?我想分析的文本将包含相对简单的短句。