Как поделить текст на абзацы по количеству предложений?

Тема в разделе "Регулярные выражения", создана пользователем azs, 25 фев 2009.

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

    azs

    Регистр.:
    24 дек 2007
    Сообщения:
    153
    Симпатии:
    142
    Подскажите как можно поделить текст на абзацы.
    Имеем: файл txt в котором много статей. Каждая статья с новой строки.
    у статьи есть заголовок, после него тоже перенос строки, далее идет текст статьи сплошняком.
    вопрос 1: как вообще абзац может выделяться ( с помощью каких знаков)
    вопрос 2: как можно текст разделить на абзацы по три-четыре предложения в каждом.

    Использую Textpipe Pro. Такая схема \w+\s\w+\046пробел определяет одно предложение схема egrep, но как сделать три? {3} не помогает.
     
  2. Alexitdv

    Alexitdv

    Регистр.:
    4 янв 2008
    Сообщения:
    161
    Симпатии:
    65
    Кусок файла приложи
     
  3. azs

    azs

    Регистр.:
    24 дек 2007
    Сообщения:
    153
    Симпатии:
    142
    http://rapidshare.com/files/202810884/splitted_text.txt
     
  4. Alexitdv

    Alexitdv

    Регистр.:
    4 янв 2008
    Сообщения:
    161
    Симпатии:
    65
    Regexp регуляр: "#(.*?\. ){3}#"

    Тестил так:
    Код:
    <?
    $text = "А. Рикошинский В сентябре 2006 г. принято постановление правительства Московской области № 884/36 об утверждении Программы «Развитие транспортно-логистической системы в Московской области в 2006–2010 годах». В документе прописаны сроки, перечень и механизм реализации схемы территориального планирования Московской области (МО) в части создания объектов капитального строительства регионального значения. Реализация программы позволит в ближайшие пять лет превратить область в основной узел логистики грузопотоков европейской части России на базе формирования единой системы транспортно-логистических узлов и центров приема, хранения, перевалки и распределения товаров. За этот период посредством развития складской инфраструктуры в Подмосковье планируется создать более 40 тыс. рабочих мест, построить 9,2 млн. м складских помещений и 700 тыс. м офисов. Помимо этого запланировано сооружение трех контейнерных и грузоперерабатывающих терминалов, 29 логистических центров. В качестве основной цели Программы декларируется повышение качества жизни населения, сглаживание дифференциации в уровнях развития муниципальных образований посредством улучшения инвестиционного климата и последовательного превращения МО в основной узел логистики грузопотоков европейской части России на базе формирования на ее территории единой системы транспортно-логистических узлов и центров приема, хранения, перевалки и распределения товаров. Необходимость принятия Программы вызвана объективными показателями развития МО, которая в последние пять лет достигла и устойчиво сохраняет высокие темпы экономического развития. По макроэкономическим показателям область занимает лидирующие позиции среди субъектов России. Валовой региональный продукт здесь в 2005 г. превысил 720 млрд. руб. и вырос более чем на 12% по сравнению с 2004 г. Оборот организаций МО в действующих ценах достиг 1937 млрд. руб. и увеличился более чем на треть. При этом в строительстве рост составил почти 2 раза, в здравоохранении и социальном обеспечении, торговле, транспорте и связи, электро- и газораспределении — более чем 1,3 раза. Сохраняются высокие темпы развития потребительского рынка. По объему розничного товарооборота область устойчиво занимает второе место в России, уступая только Москве. В 2005 г. суммарный объем торговли и платных услуг населению на территории МО превысил 880 млрд. руб. С учетом реализации национальных проектов, политики областных органов государственной власти по обеспечению роста реальных доходов населения и реализации мероприятий программы Правительства МО по развитию потребительского рынка и услуг в период до 2010 г. здесь прогнозируется дальнейший рост потребительского спроса и объемов розничной торговли и платных услуг населению с темпом не менее 15...17% в год. Увеличение потребительского спроса стабильно высокими темпами обеспечивает устойчивость темпов роста промышленности и сельского хозяйства. Оборот организаций обрабатывающей промышленности по итогам 2005 г. вырос на 23%, сельского хозяйства — на 16%. Объем промышленного производства превысил 500 млрд. руб. Индекс промышленного производства составил 129,6%. Процесс реструктуризации экономики МО продолжается преимущественно путем создания новых предприятий, ориентированных на производство потребительских товаров высокого качества. В 2005 г. создано 15 474 новых предприятия, из них 352 с иностранным капиталом.";
    
    preg_match_all("#(.*?\. ){3}#", $text, $matches);
    var_dump($matches);
    ?>
    
     
    azs нравится это.
  5. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Недостаток шаблона в том, что
    HTML:
    "А. Рикошинский В сентябре 2006 г. принято 
    Он считает за 3 предложения. Нужно ввести доп проверку на количество символов.
     
  6. Alexitdv

    Alexitdv

    Регистр.:
    4 янв 2008
    Сообщения:
    161
    Симпатии:
    65
    Тогда это не регуляр будет уже. Пусть в пхп ветке создает тему - поможем
     
  7. azs

    azs

    Регистр.:
    24 дек 2007
    Сообщения:
    153
    Симпатии:
    142
    А нельзя ли прописать исключения? вроде такой знак -^ , и нем учесть, что не учитываются:
    1 точки после одной заглавной буквы. как-то так [^А-Я\.]
    2 точки если следующее слово с прописной буквы. [^\.\255\а-я0-9]
    3 точки если после них нет пробела

    в texpipe можно выставить галочку-учитывать регистр. \255 - вроде это пробел можно так описать.
     
  8. Alexitdv

    Alexitdv

    Регистр.:
    4 янв 2008
    Сообщения:
    161
    Симпатии:
    65
    regexp: "#(.*?[а-я]\.\x20(?=[А-Я])){3}#"
     
    azs нравится это.
  9. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    На основе регулярки для деления на предложения
    Код:
    {
    \G\s*+(?:(?:
        [а-яёa-z]++|
        [^.\n?!а-яёa-z\d("]++(?:[!?]++)?|
        \.(?:\.*+)
           [^а-яёa-z.?!\n]*+(?:\n[^а-яёa-z.?!\n]*+)?
           (?=(?-i:[а-яёa-z]))|
        (?<=\b[а-юa-z])\.|
        \.(?!\.)(?<=\bмлрд|\bмлн|\bтыс|\bруб|\bгг)|
        \n[^а-яёa-z.?!\n]*+(?=(?-i:[а-яёa-z]))|
        \d++(?:\.\d++)?|
        (?:("(?=[^\s.]).*?(?<=[^\s])"|"))|
        (?:\((?=[^\s.]).*?(?<=[^\s])\)|\( )
    )+
    [?!\n.]*\s*+){1,3}
    }xsi
    
     
    azs нравится это.
Статус темы:
Закрыта.