Xwab
Форумыnavigate_nextПрограммирование на PHP

Регулярка для выбора всех предложений в тексте
Сообщения
DJ_WINROL

парсю гугл, не получаетс яподобрать регулярку для выбора предложений в сайтах.
на данный момент
[php:1:c6739cb71a]
preg_match_all('/\r*\n*\.*\s*[A-Z0-9А-Я]*[a-zа-яА-ЯA-Z\s\,0-9]+\.*\!*\?*[\n\s\r]+/siU', $content, $out);
echo '<pre>';
print_r($out);
echo '</pre>';


$arr[]= implode("\r\n", $out[0]);

echo '<pre>';
print_r($arr);
echo '</pre>';[/php:1:c6739cb71a]

Может кто сталкивался?

24 Мар 2013, 19:57
SL_NeKrOmAnT

С модификатором i не надо писать а-яА-Я и a-zA-Z

24 Мар 2013, 20:11
DJ_WINROL

Та я в курсе, просто много чего перепробовал, но лабуда. Кто нить сталкивался? Регулярка должна быть универсальной, для всех сайтов.

24 Мар 2013, 20:19
wapmorgan

предложений - это тех, которые синтаксические конструкции?

24 Мар 2013, 20:31
DJ_WINROL

Ну сначала пробел или перевод строки или точка или !? начало предложения Большая буква или цифра, слова с пробелами, и в конце опять .!? и возможно перевод строки или пробел как-то так.

24 Мар 2013, 20:45
wapmorgan

для начало нужно очистить страницу от html-тегов
[php:1:88ff5bfe3f]<?php
$data = file_get_contents('../testdata.html');
$data = preg_replace('~^.+\<body[^>]*\>(.+)\<\/body\>.+$~sui', '$1', $data);
$data = preg_replace('~\<[^>]+\>~s', '', $data);
$data = str_replace("\r", '', $data);
$data = trim(preg_replace("~([\n\t ]){2,}~s", "$1", $data));
?>[/php:1:88ff5bfe3f]
а потом каким-то образом разбить получившийся текст на кусочки. Здесь нужно самостоятельно подбирать регулярку, чтобы лишнее не вырезала. Возникает вопрос, как отделять предложения? По точке, вопросительному и восклицательному знаку?
[php:1:88ff5bfe3f]<?php
var_dump(preg_split('~[?!.\n]+~', $data));
?>[/php:1:88ff5bfe3f]
Текущую страницу данный код разобьёт на: [смотри файл parser.txt]
Как видишь, придётся придумывать фильтры для вставок кода, элементов управления страницы и для всякой мелочи типа &npsp; вместо пробелов. Поэтому-то написать универсальный парсер не получится. Для примера, на xwab'e нужно парсить только сообщения - блоки row_easy/row_hard внутри catSides и убирать служебную информацию.
P.S: парсер порвало от последней вставки тегом php, выложил в виде файла. Также он не может нормально обработать [php], если внутри нет "<?php" и "?>".

24 Мар 2013, 21:25
DJ_WINROL

Заказчик заказал такое.

24 Мар 2013, 21:35
Анархист

DJ_WINROL,какой сайт..для примера.
добавлено спустя 3 минуты:
DJ_WINROL,получить чистый текст..

26 Мар 2013, 22:53
DJ_WINROL

Анархист, читай выше, все сайты поиска с гугла.

28 Мар 2013, 2:21
Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.