gpt4 book ai didi

java - 在句子中包含句点 - 正则表达式

转载 作者:行者123 更新时间:2023-12-04 04:57:32 25 4
gpt4 key购买 nike

我有 40,000 行,需要将每一行分成不同的句子。现在我正在使用这样的模式:

String patternStr2 = "\\s*[\"']?\\s*([A-Z0-9].*?[\\.\\?!]\\s)['\"]?\\s*";

它可以处理几乎所有的句子,但对于这样的句子:
美国海军,第一次世界大战。
将分为两部分:美国和海军,第一次世界大战。

有没有办法解决这个问题?

最佳答案

好的,我想你应该不是 为此使用正则表达式,但我无法抗拒投入一些。

如果这很难理解,请告诉我,我会添加一些评论...

package test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
private static final Pattern SENTENCE_DELIMITER =
Pattern.compile("((.+?)((?<!\\.[A-Z])(\\.\\s)(.+))?)");
public static void main(String[] args) {
String lineWithOneSentence =
"U.S. Navy, World War I";
String lineWithTwoSentences =
"U.S. Navy, World War I. U.S. Air Force, World War III.";
Matcher matcher = SENTENCE_DELIMITER.matcher(lineWithOneSentence);
if (matcher.matches()) {
for (int i = 0; i <= matcher.groupCount(); i++) {
switch (i) {
case 0:
System.out.println("WHOLE MATCH: " + matcher.group(i));
break;
case 2:
System.out.println("FIRST SENTENCE: "+ matcher.group(i));
break;
case 5:
System.out.println("SECOND SENTENCE: " + matcher.group(i));
default:
}

}
}
matcher = SENTENCE_DELIMITER.matcher(lineWithTwoSentences);
if (matcher.matches()) {
for (int i = 0; i <= matcher.groupCount(); i++) {
switch (i) {
case 0:
System.out.println("WHOLE MATCH: " + matcher.group(i));
break;
case 2:
System.out.println("FIRST SENTENCE: "+ matcher.group(i));
break;
case 5:
System.out.println("SECOND SENTENCE: " + matcher.group(i));
default:
}
}
}
}
}

这里的解决方法是:
  • 使用组
  • 对后跟空格的点使用负向后看,以确保它们前面没有点后跟大写字母(如“U*.S*._”)

  • 这是相当矫枉过正的,并且在某些时候可能会成为问题,即如果您的文本按照标点符号不连贯。

    输出 :
    WHOLE MATCH: U.S. Navy, World War I
    FIRST SENTENCE: U.S. Navy, World War I
    SECOND SENTENCE: null
    WHOLE MATCH: U.S. Navy, World War I. U.S. Air Force, World War III.
    FIRST SENTENCE: U.S. Navy, World War I
    SECOND SENTENCE: U.S. Air Force, World War III.

    关于java - 在句子中包含句点 - 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16580921/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com