Разделение текста на предложения
Взято из 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)