Я записал эту часть кода, который разделяет строку и хранит ее в массиве строк:-
String[] sSentence = sResult.split("[a-z]\\.\\s+");
Однако я добавил [a-z], потому что я хотел иметь дело с частью проблемы сокращения. Но затем мой результат обнаруживается как так:-
Кроме того, когда Everett пытался сообщить им в базовой математике, они доказали unresponsiv
Я вижу, что теряю шаблон, указанный в функции разделения. Это хорошо для меня для потери периода, но потеря последней буквы слова нарушает свое значение.
Кто-то мог помочь мне с этим, и кроме того, кто-то мог помочь мне с контактом с сокращениями? Например, потому что я разделил строку на основе периодов, я не хочу терять сокращения.
Анализ предложений - далеко не тривиальная задача даже для латинских языков, таких как английский. Наивный подход, подобный тому, который вы описываете в своем вопросе, будет терпеть неудачу настолько часто, что окажется бесполезным на практике.
Лучше использовать BreakIterator , настроенный с правильной локалью.
BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US);
String source = "This is a test. This is a T.L.A. test. Now with a Dr. in it.";
iterator.setText(source);
int start = iterator.first();
for (int end = iterator.next();
end != BreakIterator.DONE;
start = end, end = iterator.next()) {
System.out.println(source.substring(start,end));
}
Дает следующий результат:
По возможности используйте инструмент обработки естественного языка, например LingPipe . Есть много тонкостей, которые будет очень сложно уловить с помощью регулярных выражений, например, ( eg. :-)), Mr. , сокращения , многоточие (...), и так далее .
На веб-сайте LingPipe есть очень простой учебник по Обнаружению предложений .
Будет сложно заставить регулярное выражение работать во всех случаях, но для решения вашей непосредственной проблемы вы можете использовать ретроспективный просмотр:
String sResult = "This is a test. This is a T.L.A. test.";
String[] sSentence = sResult.split("(?<=[a-z])\\.\\s+");
Результат:
This is a test
This is a T.L.A. test.
Обратите внимание, что есть сокращения, которые не заканчиваются заглавными буквами. , например, abbrev., Mr. и т. д. И есть предложения, не оканчивающиеся точкой!