Разделить строку в предложения
-
30-09-2019 - |
Вопрос
Я написал этот кусок кода, который разбивает строку и сохраняет его в строковом массиве: -
String[] sSentence = sResult.split("[a-z]\\.\\s+");
Однако я добавил [AZ], потому что я хотел иметь дело с некоторыми из проблем сокращения. Но тогда мой результат проявляется как так: -
Кроме того, когда Эверетт пытался проинструктировать их в базовой математике, они оказались нерешительными
Я вижу, что я теряю шаблон, указанный в разделенной функции. Для меня все в порядке, чтобы потерять период, но потерять последнее письмо слова беспокоит его значение.
Может ли кто-нибудь помочь мне с этим, и, кроме того, может ли кто-нибудь помочь мне с созреванием с сокращениями? Например, потому что я разбил строку на основе периодов, я не хочу терять сокращения.
Решение
Разборные предложения далеко не тривиальная задача, даже для латинских языков, таких как английский. Наивный подход, похожий на тот, который вы собираете в вашем вопросе, потерпели неудачу достаточно часто, чтобы оно окажет бесполезное на практике.
Лучший подход - использовать Разрыв настроен с правой локалом.
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));
}
Дает следующий результат:
- Это проверка.
- Это тест TLA.
- Сейчас с доктором в нем.
Другие советы
Будет трудно получить регулярное выражение для работы во всех случаях, но чтобы исправить свою немедленную проблему, вы можете использовать вид:
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.
Обратите внимание, что существуют аббревиатуры, которые не заканчиваются заглавными буквами, такими как Аббрев., Мистер и т. Д. ... И есть также предложения, которые не заканчиваются в периоды!
Если вы можете, используйте инструмент обработки натурального языка, например Лингпипе. Отказ Есть много тонкостей, которые будут очень трудно поймать, используя регулярные выражения, например, (например :-)), Г-н., аббревиатуры, эллипсис (...), et cetera..
Учебник очень легко следовать на Обнаружение предложения на веб-сайте Lingpipe.