Dzielenie akapitów na zdania za pomocą wyrażeń regularnych i PHP
Jestem regexp noob i próbuję podzielić akapity na zdania. W moim języku używamy dość wielu skrótów (takich jak: bl.a.) w środku zdań, więc doszedłem do wniosku, że to, co muszę zrobić, to szukać interpunkcji, po których następuje pojedynczy spacja, a następnie słowo zaczynające się wielką literą, takie jak:
[sentence1]...anymore. However...[sentence2]
Paragraf taki jak:
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.
Powinien kończyć się na tym wyjściu:
[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.
a NIE to:
[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.
Znalazłem rozwiązanie, które robi pierwszą część tego z pozytywnym wyglądem:
$regexp = (?<=[.!?] | [.!?][\'"]);
i wtedy
$sentences = preg_split($regexp, $paragraph, -1, PREG_SPLIT_NO_EMPTY);
co jest świetnym punktem wyjścia, ale dzieli się zbyt wiele razy ze względu na wiele skrótów.
Próbowałem to zrobić:
(?<=[.!?]\s[A-Z] | [.!?][\'"])
celować w każde wystąpienie jednego z nich
. or ! or ?
po którym następuje spacja i wielka litera, ale to nie zadziałało.
Czy ktoś wie, czy istnieje sposób na osiągnięcie tego, co próbuję zrobić?