Получите первые пять предложений из текста

Подскажите, пожалуйста, как на PHP получить первые пять предложений из текста ниже?

Cicero famously orated against his! Political opponent Lucius Sergius Catilina. Погода сегодня хорошая!

Occasionally the first Oration against Catiline is taken for type specimens: quo usque tandem abutere, Catilina, patientia nostra? Quam diu etiam furor iste tuus nos eludet? Cicero writing letters. Or maybe not.

Не могли бы вы показать нам, что вы пробовали? Как определить ПРИГОВОР? Должен ли он заканчиваться на ".", "!" или же "?" ? Подумайте еще раз и сначала поэкспериментируйте.

CK Wong 27.04.2018 04:08

Я пытался вытянуть предложение в массив с помощью регулярных выражений (с функцией preg_match), но не смог.

KvinT 27.04.2018 04:16
preg_match возвращает истину или ложь, но не может вернуть ни индекс, ни длину. Если вы хотите подставить предложение, вам нужен индекс и длина.
CK Wong 27.04.2018 04:22

preg_match имеет третий параметр, где записывается результат

KvinT 27.04.2018 04:24

>> Возможный дубликат

Karlo Kokkak 27.04.2018 04:48
Для справки. Я сделал для вас пример. Проверьте, если это то, что вы хотите.
CK Wong 27.04.2018 04:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
72
2

Ответы 2

Трудно разобрать неанглийские символы и расплывчатое определение предложения, но приведенный ниже код должен помочь. Может быть, с небольшими поправками. Первоначально он был найден Здесь, как прокомментировал г-н Блю выше. Я тестировал несколько раз и неплохо работает.

Function stripSentence($Text, $Number) {
        $Stripped = preg_replace('/\s+/',' ',strip_tags($Text));
        $Sentences = preg_split('/(\.|\?|\!)(\s)/',$Stripped);
        If (COUNT($Sentences) <= $Number) {
            Return $Stripped;
        } Else {
            $Stop = 0;
            ForEach($Sentences AS $i => $Sentence) {
                $Stop += StrLen($Sentence);
                If ($i >= $Number - 1) {
                    Break;
                }
            }
            $Stop += ($Number * 2);
            Return Trim(SubStr($Stripped, 0, $Stop));
        }
    }

Не уверен, насколько хорошо это будет соответствовать вашим потребностям, но в руководстве по разнесению есть функция "множественного взрыва".

function multiexplode ($delimiters,$string) {

    $ready = str_replace($delimiters, $delimiters[0], $string);
    $launch = explode($delimiters[0], $ready);
    return  $launch;
}

$text = "Cicero famously orated against his! Political opponent Lucius Sergius Catilina. Погода сегодня хорошая!

Occasionally the first Oration against Catiline is taken for type specimens: quo usque tandem abutere, Catilina, patientia nostra? Quam diu etiam furor iste tuus nos eludet? Cicero writing letters. Or maybe not.";

$exploded = multiexplode(array(".", "!", "?"),$text);

print_r(array_slice($exploded,0,5));

Затем я использую array_slice, чтобы получить первые пять элементов в массиве.

Другие вопросы по теме