Разбить текст на предложения. Регулярку не могу наприсать.

Тема в разделе "Регулярные выражения", создана пользователем jabbaxatt, 3 окт 2012.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. jabbaxatt

    jabbaxatt Добрый модератор

    Moderator
    Регистр.:
    21 янв 2009
    Сообщения:
    890
    Симпатии:
    418
    Нужно разбить произвольный текст на предложения и вывести их в столбик. Текст есть просто текст, от всех HTML тегов уже очищен.

    Простенький вариант :
    PHP:
    $pattern "~[^\.?!]+~";
    preg_match_all($pattern$mytext$matches);
     
    // далее тупо вывод в столбик
    $matches=$matches[0];
    if (
    is_array($matches))
          for (
    $i 0$i count($matches); $i++)
              echo 
    $matches[$i].'<br>';
    Ошибается на случаях типа:
    А теперь про сайт www. site.ru расскажем немного.
    Сегодня 12.12.2012 число.
    Губернатор В.А.Опоросов прибыл на заседание!

    Желательно что-бы он ещё и последний знак,по котором разделяем не резал.
     
  2. mcdir

    mcdir

    Регистр.:
    6 ноя 2007
    Сообщения:
    202
    Симпатии:
    37
    и не напишешь
    регулярку не возможно написать под все возможные входные данные правила в которых могут меняться и появляться другие
    нужно подключать морфологию и пунктуацию
     
  3. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Как вариант прогнать текст через филтра (правила) которые бы поставили маркеры (к примеру [DOT]) в место символов разделения предложений в тех местах где предложение бить не надо. Потом спокойно побить на предложения, и потом заменить уже маркеры на символы.
     
  4. jabbaxatt

    jabbaxatt Добрый модератор

    Moderator
    Регистр.:
    21 янв 2009
    Сообщения:
    890
    Симпатии:
    418
    Пока остановился на варианте:

    PHP:
    preg_match_all("/.*?[.?!](?:\s|$)/s"$html,$matches); 
    Отлично выделил предложения:

    А теперь про сайт Перейти по ссылке расскажем немного.
    Сегодня 12.12.2012 число??!
    Губернатор В.А.Опоросов прибыл на заседание!

    Но не понимает предложение
    Губернатор В. А. Опоросов прибыл на заседание!

    Впрочем, большего видимо регулярками не добиться.
     
Статус темы:
Закрыта.