String x=" i am going to the party at 6.00 in the evening. are you coming with me?";
如果我有上面的字符串,我需要使用句子边界标点符号(如 . 和 ?)将其分解为句子
但它不应该在 6 处分割句子,因为那里有一个指针。有没有办法确定java中正确的句子边界位置是什么?我尝试过在 java.util pakage 中使用 stringTokenizer 但每当它找到指针时它总是会破坏句子。有人可以建议我一种正确执行此操作的方法吗?
这是我尝试将文本标记为句子的方法。
public static ArrayList<String> sentence_segmenter(String text) {
ArrayList<String> Sentences = new ArrayList<String>();
StringTokenizer st = new StringTokenizer(text, ".?!");
while (st.hasMoreTokens()) {
Sentences.add(st.nextToken());
}
return Sentences;
}
我还有一种将句子分割成短语的方法,但这里当程序找到逗号(,)时它也会分割文本。但当有像 60,000 这样中间有逗号的数字时,我不需要拆分它。以下是我用来分割短语的方法。
public static ArrayList<String> phrasesSegmenter(String text) {
ArrayList<String> phrases = new ArrayList<String>();
StringTokenizer st = new StringTokenizer(text, ",");
while (st.hasMoreTokens()) {
phrases.add(st.nextToken());
}
return phrases;
}
最佳答案
来自documentation of StringTokenizer
:
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
如果您要使用拆分,则可以使用任何正则表达式将文本拆分为句子。您可能想要类似 ?!.
以及空格或文本结尾的内容:
text.split("[?!.]($|\\s)")
关于java - 如何判断句子的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26704900/