- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Да, кстати. Этот момент я упустил (а ещё троеточия ;) ).
Мало того, есть ещё комбинации вопроса с восклицанием. (?!)
вообще, комбинаций, мягко говоря, не малоПравила русского языка допускают также три восклицательных знака (!!!)
Мало того, многоточие может не являться окончанием предложения, а быть, например, элементом усекания текста при цитировании.
Так что надо искать знак препинания + 0-n пробелов с последующей заглавной буковой или коротким тире (если мы говорим о прямой речи ).
Вообще, у нас язык очень тяжел для парсинга.
Особенность русского языка в том, что постановка подлежащего и сказуемого в нашем языке абсолютно не важна. Мы определяем смысл предложения через интонацию, которую в письме передаем через символы пунктуации.
Мало того, есть ещё комбинации вопроса с восклицанием. (?!)
Правила русского языка допускают также три восклицательных знака (!!!)
С этим проще - после них пробел.
Мало того, многоточие может не являться окончанием предложения, а быть, например, элементом усекания текста при цитировании.
В этом случае дОлжно использовать две точки (..), а не троеточие. Но согласен, что не все такие нюансы знают-используют (как и напр некоторые забивают на большую букву в начале предложения :) ). И в любом случае с этим тоже есть заморочки для разбора.
Особенность русского языка в том, что постановка подлежащего и сказуемого в нашем языке абсолютно не важна. Мы определяем смысл предложения через интонацию, которую в письме передаем через символы пунктуации.
Ну а это вообще не важно для задачи ТСа.
немогу понять почему не работает если задать свое значение при вызове функции
если вот так работает
а вот так нет
echo tease($text, 4);
пАтиму??
Интересно взглянуть в глаза программисту, который использует foreach там, где он вообще нафих не нужен. (Может он просто не знает, что есть и другие операторы цикла?)
тут надо for обычный юзать, Он и читается проще и , главное, в данном случае работает зело быстрее.
"пАтиму??"
а вот... Тут или регэексп находит всего два предложения или ... одно из двух. (с) Колобки
А если есть, то 4 раза (с каждым возможным разделителем ;))
Ида. Надо искать не точку, а точку с пробелом.
Но ещё вспомнилась засада - если в тексте есть сокращения, то всё намного хуже.
Так уж и 4 раза? 15 мин на коленке:
<?php
$a = 'А если есть, то 4 раза!!! С каждым возможным разделителем; Ида... Т..н. (так называемые) нюансы. Надо искать не точку, а точку с пробелом! Но ещё вспомнилась засада! Если в тексте есть т.н. сокращения, то всё намного хуже.
вопроса с восклицанием?! Правила русского языка допускают также три восклицательных знака!!!
а вот... Тут или регэексп находит всего два предложения или ... одно из двух';
echo "\nOriginal: ", $a, "\n";
$a = preg_split("//u", $a, -1, PREG_SPLIT_NO_EMPTY);
$l = count($a);
$passage_separator = ['.', '!', '?'];
$res = [];
$str = '';
for($i=0;$i<$l;$i++){
if(in_array($a[$i], $passage_separator)) {
$j = $i+1;
while($j<$l){
#смотрим на последующие символы, в зависимости от (. А) или (. а)
if(!in_array($a[$j], $passage_separator)){
#для упрощения, считаем, что разделитель всегда пробел.
if(
$a[$j]==' '
&& preg_match('~\p{Lu}~u', $a[$j+1])
) {
#как только пробел и следующий символ уппер_кейс, собранную строку в массив и обнуляем
if($str) $res[] = $str;
$str = '';
} else {
$str.=$a[$j-1];
}
break;
}
$j++;
}
}
else {
$str.=$a[$i];
}
}
if ($str) $res[] = $str; #если что то осталось
print_r($res);
#trim? Обработку, чтобы не попадали пустые строки, оставляю другим
?>
Результат:
оффторп
форточники в шоке:
а как же знаки в конце предложения?
покрутить назад, до первого символа !разделитель_пассажа, перед отгрузкой в массив, что то типа:
Или собирать разделители_пассажей. Но, с оглядкой, что в строке они могут быть не только в конце предложения. Например в сокращениях.
Так уж и 4 раза?
Тогда речь шла о 4 возможных разделителях и реализации без регулярок и массивов. ;)
Последний в списке регэксп костылирует любимоую "особенность" Льва Николаевича забирать пояснения в квадратные скобки. Его, в принципе, можно убрать.