Разделение абзацев на предложения с помощью regexp и PHP

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

[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 ?

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

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

2 ответов


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

объяснил демо здесь:http://regex101.com/r/iR7cC8


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

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

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