можно потеряться))
какой итоговый код, то?
https://searchengines.guru/ru/forum/1036230/page3#comment_16532933
но надо заменить одну строку отсюда: https://searchengines.guru/ru/forum/1036230/page4#comment_16532962
<a href="#" class="need-action" data-action="open">действие: открытие окна</a><a href="#" class="need-action" data-action="open">действие: открытие окна</a><a href="#" class="need-action" data-action="redirect">действие: редирект</a><script>$(document).ready(function(){ $('.need-action').click(function(){ var aType = $(this).attr('action'); if (aType == 'open'){ //Открываем окно } if (aType == 'redirect'){ //Переходим куда-нибудь } return false; })})</script>
Но тут возник еще один вопрос. Если у нас есть прямая речь, состоящая из двух предложений, например:
В записочках, разосланных утром с красным лакеем, было написано без различия во всех: "Si vous n'avez rien de mieux a faire, M. le comte (или mon prince), et si la perspective de passer la soiree chez une pauvre malade ne vous effraye pas trop, je serai charmee de vous voir chez moi entre 7 et 10 heures. Annette Scherer".
то по-хорошему, пилить внутри прямой речи текст нельзя
$text = preg_replace(['/\R+|\t+|\]|\[/imu', '/\s+/imu', '/(\S)\s\,/imu', '/^\s+/imu', '/(\.+|\?+|\!+)(\s+)([A-Z|А-Я|\-]+)/u' ],['', ' ', '$1,', '', '$1$2{:separate:}$3'], $text);
Она теперь удаляет пробелы перед запятой (запятая не должна отбиваться от текста) Ну и исправил тему с точкой в середине предложения. пример такого текста с "левой" точкой может быть "Новости, статьи и т.д. должны быть переименованы!" делилка на устойчивые сокращения срабатывать не должна.
В самом начале, также выпиливаются квадратные скобки. дело в том, что я тестирую этого "желтого полосатика" на Войне и Мире и там море сносок, обернутых в квадратные скобки.
public function index() { $text = file_get_contents(FCPATH.'peace_and_war.txt'); print_r($this->text_explode($text,5)); } public function text_explode($text, $length = 4, $offset=0) { // удаляем символы табуляции и переводы строк // размечаем документ для последующего деления $text = preg_replace(['/\R+|\t+/imu', '/\s+/imu', '/^\s+/imu', '/(\[)\s+|\s+(\])/imu', '/(\.+\s+)|(\!+\s+)|(\?+\s+)|(\?\!\s+)/imu', '/(\.+\]\s+)|(\!+\]\s+)|(\?+\]\s+)|(\?\!\]\s+)/imu' ],['', ' ', '', '$1', '$1{:separate:}', '$1{:separate:}'],$text); // делим $text_exploded = explode('{:separate:}',$text); return array_slice ($text_exploded,$offset, $length); }
Интересно взглянуть в глаза программисту, который использует foreach там, где он вообще нафих не нужен. (Может он просто не знает, что есть и другие операторы цикла?) тут надо for обычный юзать, Он и читается проще и , главное, в данном случае работает зело быстрее.
"пАтиму??"а вот... Тут или регэексп находит всего два предложения или ... одно из двух. (с) Колобки
Да, кстати. Этот момент я упустил (а ещё троеточия ;) ).
Мало того, есть ещё комбинации вопроса с восклицанием. (?!)Правила русского языка допускают также три восклицательных знака (!!!)Мало того, многоточие может не являться окончанием предложения, а быть, например, элементом усекания текста при цитировании.
Так что надо искать знак препинания + 0-n пробелов с последующей заглавной буковой или коротким тире (если мы говорим о прямой речи ).Вообще, у нас язык очень тяжел для парсинга. Особенность русского языка в том, что постановка подлежащего и сказуемого в нашем языке абсолютно не важна. Мы определяем смысл предложения через интонацию, которую в письме передаем через символы пунктуации.
это не самая простая задача, так как у текста могут быть окончания не только на точку. Есть еще вопросительный и восклицательный знаки. Их кол-во тоже может меняться. могут быть и комбинации. Многие авторы, по доброте душевной, добавляют главы и разделы. по этой причине текст обычно рубится за несколько проходов. первые 1-n проходов подготовительные, когда убирается вся ненужная информация, а последний проход уже разбиение текста на предложения (абзацы).
если у вас текст стандартизирован. то-есть нет ни вопросительных знаков, ни восклицательных, ни многоточий, то просто прогоняете его explode и готово. если же у вас "Война и Мир" вот там уже будет конкретная веселуха