Вопрос

Я написал этот кусок кода, который разбивает строку и сохраняет его в строковом массиве: -

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));
}

Дает следующий результат:

  1. Это проверка.
  2. Это тест TLA.
  3. Сейчас с доктором в нем.

Другие советы

Будет трудно получить регулярное выражение для работы во всех случаях, но чтобы исправить свою немедленную проблему, вы можете использовать вид:

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top