Java Regex для определения конца предложения, НО игнорировать (число) (период), например. 15

Попытка найти хорошее регулярное выражение для определения конца предложения в java. Основная проблема заключается в том, что если есть число, а затем точка, он определяет его как конец предложения (см. Демонстрационную ссылку). Но в моем случае я бы предпочел, чтобы он не распознавал это как конец предложения, хотя в некоторых случаях это может быть. Чаще всего я вижу в документах заголовки разделов, которые выглядят так:

  12.  the end of the world   13. world didnt end  14. nope it did

В моем случае он разбивает множество простых списков заголовков на предложения, которые мне не нужны.

дополнительная проблема с решением, опубликованным здесь:

Предлагаемое решение: [!?.] + (? = $ | \ S)

See demo:  http://regex101.com/r/lS5tT3/15

Проблема в том, что если есть заголовок главы, такой как 15., он неправильно видит его как конец предложения. попробуйте этот текст в демонстрации, и вы увидите проблему в первом предложении:

   This is the f!!rst *15.* the best sentence! Is this the second one? The third 32.5 sentence is here... And the fourth one!!

Если есть какие-то знатоки регулярных выражений, которые могут помочь логически добавить, что это не конец предложения, если точка пробела, а предшествующее число, которое было бы весьма полезно


person Gia    schedule 15.01.2020    source источник
comment
Используйте отрицательный просмотр назад, соответствующий цифре.   -  person Barmar    schedule 16.01.2020
comment
Я пытался улучшить форматирование вашего кеситона, но потом вы отменили его при следующем редактировании. Пожалуйста, исправьте это сейчас.   -  person Barmar    schedule 16.01.2020
comment
Вам также придется учитывать общие сокращения, такие как Dr., U.S. и т. Д.   -  person Wiktor Stribiżew    schedule 16.01.2020
comment
И учитывайте имена с инициалом отчества, например John F. Kennedy   -  person FredK    schedule 16.01.2020
comment
@Barmar ОК, я закончил. извините за отмену вашей явно необходимой помощи да, я добавил взгляд назад. пожалуйста, простите мое слабое регулярное выражение   -  person Gia    schedule 16.01.2020
comment
@FredK да, я тестировался с доктором США и Джоном Ф. Кеннеди   -  person Gia    schedule 16.01.2020
comment
Как работает проверка этих двух предложений: His first name and initial are John F. Kennedy was the 35th president.   -  person FredK    schedule 16.01.2020


Ответы (1)


Это регулярное выражение работает с некоторыми сокращениями и правильно распознает маркеры конца предложения. К сожалению, для java string.split мне понадобится инверсия этой функции ...

 ([!?]+(?=$|\s))|((?<![\d])(?<!etc)(?<!Mr)(?<!mr)(?<!i.e)(?<!Dr)(?<!dr)(?<!Mrs)(?<!mrs)(?<![ A-Z])(?<!Ms)(?<!ms)(?<!Phd)(?<!u\.s)(?<!U\.S)(?<!\.)[.]{1}(?=$|\s))|
person Gia    schedule 15.01.2020