PostHeaderIcon Разделение текста на предложения

Взято из RU.PHP

Все сохранено.

________________________________

= ru.php (2:6055/4.777) =======================================================
Msg  : 33 of 63
From : Kalachihin Vladimir                 2:5095/1.39     25 Feb 09 18:56:54
To   : All
Subj : Выделение предложений
===============================================================================
Приветствую тебя, All!

В связи с неспособностью осознать синтаксис регулярных выражений —
прошу, подскажите, как разделить текст на предложения — в человеческом смысле.
Т.е., — по точкам в конце оных.

Точность не особо нужна — выделение инициалов как отдельных предложений
допускается.

Мною придумано
preg_split(‘/[\.?!]\s([А-Я])/m’, $File, -1, PREG_SPLIT_NO_EMPTY)
но, блин, не делит… Т.е., делит на некие куски, но никакой связи с
предложениями в этих кусках я не обнаружил.

Калачихин Владимир.

— FleetStreet 1.22+
* Origin: Stager’s station, aka stagerATau.ru (2:5095/1.39)

= ru.php (2:6055/4.777) =======================================================
Msg  : 34 of 63
From : Alex Mizrahi                        2:5020/400      26 Feb 09 15:15:18
To   : Kalachihin Vladimir
Subj : Re: Выделение предложений
===============================================================================
From: «Alex Mizrahi» <udodenko@users.sourceforge.net>

KV> В связи с неспособностью осознать синтаксис регулярных выражений —

KV> Мною придумано
KV> preg_split(‘/[\.?!]\s([А-Я])/m’, $File, -1, PREG_SPLIT_NO_EMPTY)

тут дело не в синтаксисе, а семантике: твоё выражение считает первую
букву следующего предложения частью разделителя, поэтому она съедается.

чтобы наличие буквы проверялось, но она не входила в совпадающую часть
(а соответственно и в разделитель) нужно воспользоваться positive lookahead:

(?=[А-Я])

кроме того, ты полагаешь что между точкой и следующим словом только
один пробел, а на самом деле их там может быть более чем один (например,
перевод строки считается как два символа — \r\n — в Windows). с учётом
этого:

/[.?!]\s+(?=[А-Я])/m

— ifmail v.2.15dev5.4
* Origin: Demos online service (2:5020/400)

= ru.php (2:6055/4.777) =======================================================
Msg  : 35 of 63
From : Kalachihin Vladimir                 2:5095/1.39     26 Feb 09 21:21:38
To   : Alex Mizrahi
Subj : Выделение предложений
===============================================================================
Приветствую тебя, Alex!

Replying to a message of Alex Mizrahi to Kalachihin Vladimir:

AM> с учётом этого:
AM> /[.?!]\s+(?=[А-Я])/m

Гениально! Оно делит по предложениям!
Спасибо!

Калачихин Владимир.

— FleetStreet 1.22+
* Origin: Stager’s station, aka stagerATau.ru (2:5095/1.39)

Оставить комментарий

PR-CY.ru