java - 如何判断句子的结尾

标签 java regex nlp tokenize

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/

相关文章:

java - Maven 将 war 爆发到 jboss 部署目录

java - 将数据从 html 表单发送到 Java Applet?

java - 如何在 Kotlin 或 Java 中对排序列表进行集合操作?

java - Jboss一步步设置热部署

php - 使用正则表达式从 URL 获取字符串?

javascript - 如何在 JavaScript 正则表达式中捕获任意数量的组?

machine-learning - 训练后如何用时间分布密集替换嵌入层?

regex - 正则表达式 匹配正则表达式

algorithm - 一种将一本书分解成人物及其互动的方法?

machine-learning - WSD 任务的细粒度和粗粒度分数之间的差异?