Я хотел бы разбить строку на предложения. Поскольку это не так просто (из-за того, что многие "." Не являются окончанием предложений), я использую BreakIterator следующим образом:
public static List<String> textToSentences(String text) {
BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US);
iterator.setText(text);
List<String> sentences = new ArrayList<String>(); // empty list
String oneSentence = "";
int start = iterator.first();
int ctr = 0;
for (int end = iterator.next(); end != BreakIterator.DONE; start = end, end = iterator.next()) {
oneSentence = text.substring(start,end);
System.out.println(ctr + ": " + oneSentence);
sentences.add(oneSentence);
ctr += 1;
}
return sentences;
}
Если я проверяю это сейчас:
String text = "This is a test. This is test 2 ... This is test 3? This is test 4!!! This is test 5!? This is a T.L.A. test. Now with a Dr. in it. And so associate-professor Dr. Smith said that it was 567 B.C.. Hi there! There is one thing: go home!";
Результат:
0: This is a test.
1: This is test 2 ...
2: This is test 3?
3: This is test 4!!!
4: This is test 5!?
5: This is a T.L.A. test.
6: Now with a Dr. in it.
7: And so associate-professor Dr.
8: Smith said that it was 567 B.C..
9: Hi there!
10: There is one thing: go home!
В предложении 6 он правильно игнорирует доктора, но в предложении 7 он разрывается после доктора (7 + 8 должно быть одним предложением). Почему это так и как я могу это исправить?