Подтвердить что ты не робот

Разделение абзацев на предложения с регулярным выражением и PHP

Я regexp noob и пытаюсь разделить абзацы на предложения. На моем языке мы используем довольно много аббревиатур (например: bl.a.) в середине предложений, поэтому я пришел к выводу, что мне нужно искать пунктуации, за которыми следует одиночный а затем слово, начинающееся с заглавной буквы:

[sentence1]...anymore. However...[sentence2]

Итак, абзац вроде:

Der er en lang og bevæget forhistorie bag lov om varsling m.v. i forbindelse med afskedigelser af større omfang. Det er ikke en bureaukratisk lovtekst blandt så mange andre.

Должен закончить этот вывод:

[0] => Der er en lang og bevæget forhistorie bag lov om varsling m.v. i forbindelse med afskedigelser af større omfang.
[1] => Det er ikke en bureaukratisk lovtekst blandt så mange andre.

и НЕ:

[0] => Der er en lang og bevæget forhistorie bag lov om varsling m.v. 
[1] => i forbindelse med afskedigelser af større omfang.
[2] => Det er ikke en bureaukratisk lovtekst blandt så mange andre.

Я нашел решение, которое делает первую часть этого с позитивной функцией lookbehind:

$regexp = (?<=[.!?] | [.!?][\'"]);

а затем

$sentences = preg_split($regexp, $paragraph, -1, PREG_SPLIT_NO_EMPTY);

что является отличной отправной точкой, но слишком много раз разбивается из-за множества сокращений.

Я попытался сделать это:

(?<=[.!?]\s[A-Z] | [.!?][\'"])

для того, чтобы нацеливать каждое событие либо

. or ! or ?

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

Кто-нибудь знает, есть ли способ выполнить то, что я пытаюсь сделать?

4b9b3361

Ответ 1

Unicode RegExp для расщепления предложений: (?<=[.?!;])\s+(?=\p{Lu})

Разъяснение демо: http://regex101.com/r/iR7cC8

Ответ 2

Поиск такого шаблона по-прежнему кажется ненадежным, но поскольку предложения могут быть завершены возвратом строки, я бы попробовал только следующее

[.\!\?][\s\n\r\t][A-Z] 

Я не думаю, что вы на самом деле предназначались для того, чтобы смотреть вперед? (!? вместе, поэтому использование \escapes it - указывает регулярному выражению игнорировать любой особый смысл)