Разделение предложений в абзацы по количеству слов

Я хочу разбить предложение на абзац, и каждый абзац должен содержать меньше слов. Например:

Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. 

Paragraph 1: 
Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.

Paragraph 2: 
Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. 

В приведенном выше примере слова меньше 20 находятся в пункте 1, а остальные - в пункте 2.

Есть ли способ добиться этого с помощью php?

я пытался $abc = explode(' ', $str, 20); который будет хранить 20 слов в массиве, а затем остальные в последнем массиве $abc['21']. Как я могу извлечь данные из первых 20 массивов как первый абзац, а остальные как второй абзац?

1 ответ

Решение

Сначала разбейте строку на предложения. Затем зациклите массив предложений, начните с добавления предложения в массив параграфов, затем подсчитайте слова в этом элементе массива параграфов, если их значение больше 19, то счетчик абзацев увеличивается.

$string = 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source.';

$sentences = preg_split('/(?<=[.?!;])\s+(?=\p{Lu})/', $string);

$ii = 0;
$paragraphs = array();
foreach ( $sentences as $value ) {
    if ( isset($paragraphs[$ii]) ) { $paragraphs[$ii] .= $value; }
    else { $paragraphs[$ii] = $value; }
    if ( 19 < str_word_count($paragraphs[$ii]) ) {
        $ii++;
    }
}
print_r($paragraphs);

Выход:

Array
(
    [0] => Contrary to popular belief, Lorem Ipsum is not simply random text.It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.
    [1] => Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source.
)

Разделитель предложений найден здесь: Разделение параграфов на предложения с помощью регулярных выражений и PHP

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