X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
> PHP разбить текст по предложениям.
centurion
centurion
Topic Starter сообщение 9.8.2010, 14:18; Ответить: centurion
Сообщение #1


Есть тхт файл в нем 5 строк (абзацев) по более ста предложений.
Мне бы его разбить на много абзацев. Чтоб в каждом абзаце было 3-6 предложений.
Можно как-то сделать? Ориентируясь на точки, восклицательные знаки и знаки вопроса. Т.е. ориентируясь на завершение предложения.

Сообщение отредактировал centurion - 9.8.2010, 14:18
8
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
bitrixoid
bitrixoid
сообщение 9.8.2010, 14:55; Ответить: bitrixoid
Сообщение #2


Конечно можно. "В лоб" - заводим счетчик, ищем вхождение {. ? !}, при нахождении увеличиваем счетчик, по достижению "3-6" ставим перенос строки и обнуляем счетчик. Прогоняем единожды по всему файлику.
Не забыть о многоточиях, ну и заранее можно убить все абзацы и сделать текст сплошным. Кодить не буду, сорри, кто нибудь наверняка найдется.


--------------------
клоновод
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Cttr
Cttr
сообщение 9.8.2010, 14:59; Ответить: Cttr
Сообщение #3


explode в помощь

Сообщение отредактировал Cttr - 9.8.2010, 15:06
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DeimosFobos
DeimosFobos
сообщение 9.8.2010, 16:21; Ответить: DeimosFobos
Сообщение #4


Держите:
<?php
$text = file_get_contents('text.txt');
$text = preg_replace("/([.?!])/", "$1{znak}", $text);
$array = explode('{znak}', $text);
$count = count($array);
$randnum = rand(3,6);
$nownum = 0;
$lc = 0;

foreach( $array as $line ) {
    $line = trim($line);
    if($line) {
        if($nownum >= $randnum) {
            $randnum = rand(3,6);
            $nownum = 0;
            $lc++;
        }
        $lines[$lc] .= $line;
        $nownum++;
    }
}
print_r($lines);
?>

$lines: массив с предложениями.

Сообщение отредактировал DeimosFobos - 9.8.2010, 16:22
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 9.8.2010, 16:49; Ответить: webpavilion
Сообщение #5


обожаю такие задачки, вот мой вариант:
    $path = 'file.txt';

    $txt = file_get_contents($path);
    $txt = preg_split('#(?<=(\.|\!|\?))\s#s', $txt);
    $txt = array_map("trim", $txt);

    $new = array(); #добавил ибо так правильнее.

    $count = count($txt);
    
    $start = 0;
    $rand = mt_rand(3, 6);
    
    while ($start<=$count) {
        $new[] = implode(' ', array_slice($txt,$start, $rand));
        $start += $rand;
        $rand = mt_rand(3, 6);
    }
    
    echo $last = count($new)-1;
    if ($new[$last] == '') unset ($new[$last]);
    
#    $new - содержит массив с предложениями;


вот сравнение скорости работы с вариантом DeimosFobos:
<?php

ini_set("max_execution_time", "240");
$p = 1000;
$path = 'file.txt';
function r ($timestart,$timestop,$name) {
    global $p;
    echo "$p повторений '$name': ", round(($timestop-$timestart), 3), ' сек.<br>';    
}

$timestart = microtime(true);

$intxt = file_get_contents($path);
for($t = 0; $t < $p; $t++) {
    $txt = preg_split('#(?<=(\.|\!|\?))\s#s', $intxt);
    $txt = array_map("trim", $txt);

    $count = count($txt);
    
    $start = 0;
    $rand = mt_rand(3, 6);
    
    while ($start<=$count) {
        $new[] = implode(' ', array_slice($txt,$start, $rand));
        $start += $rand;
        $rand = mt_rand(3, 6);
    }
    
    $last = count($new)-1;
    if ($new[$last] == '') unset ($new[$last]);
}
r($timestart, microtime(true), 'webpavilion');


$timestart = microtime(true);


$text = file_get_contents($path);
for($t = 0; $t < $p; $t++) {
    $text = preg_replace("/([.?!])/", "$1{znak}", $text);
    $array = explode('{znak}', $text);
    $count = count($array);
    $randnum = rand(3,6);
    $nownum = 0;
    $lc = 0;

    foreach( $array as $line ) {
        $line = trim($line);
        if($line) {
            if($nownum >= $randnum) {
                $randnum = rand(3,6);
                $nownum = 0;
                $lc++;
            }
            $lines[$lc] .= $line;
            $nownum++;
        }
    }
}
r($timestart, microtime(true), 'DeimosFobos');


результат на моем ноутбуке:
1000 повторений 'webpavilion': 1.422 сек.
1000 повторений 'DeimosFobos': 55.84 сек.


содержимое файла с текстом в utf-8:
SWOT-анализ раскручивает потребительский рынок, используя опыт предыдущих кампаний. Продуктовый ассортимент, несмотря на внешние воздействия, интуитивно понятен. Гелиоцентрическое расстояние, сублимиpуя с повеpхности ядpа кометы, просветляет сарос, используя опыт предыдущих кампаний. Часовой угол, в рамках сегодняшних воззрений, синхронно образует астероидный годовой параллакс, таким образом объектом имитации является число длительностей в каждой из относительно автономных ритмогрупп ведущего голоса. Флажолет неравномерен. Стимулирование коммьюнити варьирует терминатор, это довольно часто наблюдается у сверхновых звезд второго типа. Ось, согласно традиционным представлениям, представляет собой длительностный секстант, данное соглашение было заключено на 2-й международной конференции "Земля из космоса - наиболее эффективные решения". Векторно-зеркальная синхронность, и это особенно заметно у Чарли Паркера или Джона Колтрейна, жизненно просветляет целевой сегмент рынка, благодаря широким мелодическим скачкам. Как предсказывают футурологи крещендирующее хождение спонтанно детерминирует терминатор, на этих моментах останавливаются Л.А.Мазель и В.А.Цуккерман в своем "Анализе музыкальных произведений". Как отмечает Майкл Мескон, пуанта изящно гасит социальный статус, таким образом конструктивное состояние всей музыкальной ткани или какой-либо из составляющих ее субструктур (в том числе: временнoй, гармонической, динамической, тембровой, темповой) возникает как следствие их выстраивания на основе определенного ряда (модуса). Зенитное часовое число использует Ганимед, хотя это довольно часто напоминает песни Джима Моррисона и Патти Смит. Кульминация прочно продолжает дорийский эксцентриситет, однако сами песни забываются очень быстро. Бизнес-план последовательно представляет собой радиант, о чем подробно говорится в книге М.Друскина "Ганс Эйслер и рабочее музыкальное движение в Германии". Параллакс сбалансирован.
Иными словами, интервально-прогрессийная континуальная форма индуктивно тормозит флэнжер, хотя это довольно часто напоминает песни Джима Моррисона и Патти Смит. Имидж предприятия, на первый взгляд, перечеркивает непреложный популяционный индекс, но если бы песен было раз в пять меньше, было бы лучше для всех. Флюгель-горн многопланово позиционирует миксолидийский принцип восприятия, а после исполнения Утесовым роли Потехина в "Веселых ребятах" слава артиста стала всенародной. Конечно, нельзя не принять во внимание тот факт, что фаза продуцирует мономерный побочный PR-эффект, не считаясь с затратами. Глиссандо переворачивает мнимотакт, но кольца видны только при 40–50. Раскрутка охватывает хроматический спектральный класс, не считаясь с затратами. Отвесная линия пока плохо продолжает афелий , оптимизируя бюджеты. Действительно, процессуальное изменение поддерживает шоу-бизнес, учитывая, что в одном парсеке 3,26 световых года. Высота прекрасно переворачивает болид , оптимизируя бюджеты. Различное расположение специфицирует вращательный параметр, о чем подробно говорится в книге М.Друскина "Ганс Эйслер и рабочее музыкальное движение в Германии". Весеннее равноденствие , а там действительно могли быть видны звезды, о чем свидетельствует Фукидид решает параллакс, осознав маркетинг как часть производства. Каллисто вызывает контент, данное соглашение было заключено на 2-й международной конференции "Земля из космоса - наиболее эффективные решения". Производство, и это особенно заметно у Чарли Паркера или Джона Колтрейна, изменяет типичный динамический эллипсис, используя опыт предыдущих кампаний.


Сообщение отредактировал webpavilion - 9.8.2010, 17:00


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DeimosFobos
DeimosFobos
сообщение 9.8.2010, 18:40; Ответить: DeimosFobos
Сообщение #6


(webpavilion @ 9.8.2010, 15:49) *
вот сравнение скорости работы с вариантом DeimosFobos:

снова вы и снова вам не получится выставить меня дураком.
мой код работает быстрее вашего.
вы со своими повторами дублируете $text.
я писал код для использования без повторов и не придавал значение названию переменной.
замените :
$text = preg_replace("/([.?!])/", "$1{znak}", $text);
$array = explode('{znak}', $text);

на:
$newtext= preg_replace("/([.?!])/", "$1{znak}", $text);
$array = explode('{znak}', $newtext);

и вот вам результат:
1000 повторений 'webpavilion': 0.521 сек.
1000 повторений 'DeimosFobos': 0.321 сек.

webpavilion хватит пытаться выставить меня дураком, пока вам удается только себя...

Сообщение отредактировал DeimosFobos - 9.8.2010, 18:43


Поблагодарили: (5)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 9.8.2010, 20:51; Ответить: webpavilion
Сообщение #7


DeimosFobos, ну зачем так грубо то? покажите где я пытался выставить вас дураком? специально же опубликовал все исходники, что бы вы смогли проверить.

специально через дебагер дома прогнал нашел СВОЮ ошибку.

втом виде что есть сейчас ваш код на 10-15% быстрее, я вот например не знал что preg_splt

медленнее чем preg_replace+explode


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DeimosFobos
DeimosFobos
сообщение 9.8.2010, 21:13; Ответить: DeimosFobos
Сообщение #8


(webpavilion @ 9.8.2010, 20:51) *
DeimosFobos, ну зачем так грубо то? покажите где я пытался выставить вас дураком?

да у меня просто осталось ощущение от нашей старой темыsmile.gif, ну если не хотели, извиняюсь за грубость.

Сообщение отредактировал DeimosFobos - 9.8.2010, 21:15


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
webpavilion
webpavilion
сообщение 9.8.2010, 21:26; Ответить: webpavilion
Сообщение #9


(DeimosFobos @ 9.8.2010, 21:13) *
да у меня просто осталось ощущение от нашей старой темыsmile.gif, ну если не хотели, извиняюсь за грубость.

людям свойственно мерится пиписьками, так они устроены. вы написали свой скрипт чуть раньше меня - просто стало интересно у кого быстрее...

кто старое помянет тому пальцем в глаз, я на вас зла не держу.


--------------------
Не ведитесь, cамопис это почти всегда плохо!

Делаю сайты на Drupal 7.x
(очень дорого)


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
centurion
centurion
Topic Starter сообщение 9.8.2010, 21:38; Ответить: centurion
Сообщение #10


Спасибо ребята. Уверен будут юзать оба скрипта.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Раскройте свой потенциал заработка с помощью 2x2 Media Network — вашего пути к выгодным предложениям CPA!
Присоединяйтесь к 2x2 Media Network, вашему надежному партнеру в мире
11 2x2MediaLimited 3299 18.4.2024, 4:22
автор: 2x2MediaLimited
Открытая тема (нет новых ответов) SEO-текст на главной странице сайта и в категориях
5 boltuk 1432 26.3.2024, 21:43
автор: c4p1t4l15t
Открытая тема (нет новых ответов) Можно ли в старый SEO текст вместо старого домена поставить новый?
3 Tutich 1221 22.3.2024, 14:47
автор: Tutich
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3425 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1246 24.11.2023, 14:46
автор: alexey


 



RSS Текстовая версия Сейчас: 25.4.2024, 16:35
Дизайн