Помощник
|
PHP разбить текст по предложениям. |
centurion
|
Сообщение
#1
|
||
|
|
||
|
|||
bitrixoid |
9.8.2010, 14:55;
Ответить: bitrixoid
Сообщение
#2
|
|
Конечно можно. "В лоб" - заводим счетчик, ищем вхождение {. ? !}, при нахождении увеличиваем счетчик, по достижению "3-6" ставим перенос строки и обнуляем счетчик. Прогоняем единожды по всему файлику.
Не забыть о многоточиях, ну и заранее можно убить все абзацы и сделать текст сплошным. Кодить не буду, сорри, кто нибудь наверняка найдется. -------------------- |
|
|
Cttr |
9.8.2010, 14:59;
Ответить: Cttr
Сообщение
#3
|
|
explode в помощь
Сообщение отредактировал Cttr - 9.8.2010, 15:06 |
|
|
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 |
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 (очень дорого) |
|
|
DeimosFobos |
9.8.2010, 18:40;
Ответить: DeimosFobos
Сообщение
#6
|
|
вот сравнение скорости работы с вариантом 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 |
|
|
webpavilion |
9.8.2010, 20:51;
Ответить: webpavilion
Сообщение
#7
|
|
DeimosFobos, ну зачем так грубо то? покажите где я пытался выставить вас дураком? специально же опубликовал все исходники, что бы вы смогли проверить.
специально через дебагер дома прогнал нашел СВОЮ ошибку. втом виде что есть сейчас ваш код на 10-15% быстрее, я вот например не знал что preg_splt медленнее чем preg_replace+explode -------------------- Не ведитесь, cамопис это почти всегда плохо! Делаю сайты на Drupal 7.x (очень дорого) |
|
|
DeimosFobos |
9.8.2010, 21:13;
Ответить: DeimosFobos
Сообщение
#8
|
|
DeimosFobos, ну зачем так грубо то? покажите где я пытался выставить вас дураком? да у меня просто осталось ощущение от нашей старой темы, ну если не хотели, извиняюсь за грубость. Сообщение отредактировал DeimosFobos - 9.8.2010, 21:15 |
|
|
webpavilion |
9.8.2010, 21:26;
Ответить: webpavilion
Сообщение
#9
|
|
да у меня просто осталось ощущение от нашей старой темы, ну если не хотели, извиняюсь за грубость. людям свойственно мерится пиписьками, так они устроены. вы написали свой скрипт чуть раньше меня - просто стало интересно у кого быстрее... кто старое помянет тому пальцем в глаз, я на вас зла не держу. -------------------- Не ведитесь, cамопис это почти всегда плохо! Делаю сайты на Drupal 7.x (очень дорого) |
|
|
centurion
|
Сообщение
#10
|
|
Спасибо ребята. Уверен будут юзать оба скрипта.
|
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Раскройте свой потенциал заработка с помощью 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 |
Текстовая версия | Сейчас: 25.4.2024, 16:35 |