Подскажите, пожалуйста, как на 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.
Я пытался вытянуть предложение в массив с помощью регулярных выражений (с функцией preg_match), но не смог.
preg_match возвращает истину или ложь, но не может вернуть ни индекс, ни длину. Если вы хотите подставить предложение, вам нужен индекс и длина.
preg_match имеет третий параметр, где записывается результат






Трудно разобрать неанглийские символы и расплывчатое определение предложения, но приведенный ниже код должен помочь. Может быть, с небольшими поправками. Первоначально он был найден Здесь, как прокомментировал г-н Блю выше. Я тестировал несколько раз и неплохо работает.
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, чтобы получить первые пять элементов в массиве.
Не могли бы вы показать нам, что вы пробовали? Как определить ПРИГОВОР? Должен ли он заканчиваться на ".", "!" или же "?" ? Подумайте еще раз и сначала поэкспериментируйте.