Я regexp noob и пытаюсь разделить абзацы на предложения. На моем языке мы используем довольно много аббревиатур (например: bl.a.) в середине предложений, поэтому я пришел к выводу, что мне нужно искать пунктуации, за которыми следует одиночный а затем слово, начинающееся с заглавной буквы:
[sentence1]...anymore. However...[sentence2]
Таким образом, абзац вроде:
Der er en lang og bevæget forhistorie bag lov om varsling mv 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 mv 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 mv [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[AZ] | [.!?][\'"])
для каждого
. or ! or ?
за которым следует пробел и заглавная буква, но это не сработало.
Кто-нибудь знает, есть ли способ сделать то, что я пытаюсь сделать?
Unicode RegExp для расщепления предложений: (?<=[.?!;])\s+(?=\p{Lu})
Разъяснение демо: http://regex101.com/r/iR7cC8
Поиск такого шаблона по-прежнему кажется ненадежным, но поскольку предложения могут быть завершены возвратом строки, я бы попробовал только следующее
[.\!\?][\s\n\r\t][AZ]
Я не думаю, что вы на самом деле предназначались для вас? (!? вместе, поэтому использование \ escapes it – указывает регулярному выражению игнорировать любое специальное значение)