БлогNot. PHP: преобразуем текст в массив для основных типовых случаев

PHP: преобразуем текст в массив для основных типовых случаев

Возможно, достаточно было поместить в полезные мелочи по PHP, но раз получилась актуальная в данный момент учебная заметка, пусть так и будет.

Есть текст, прочитанный из файла или полученный запросом из поля базы данных и занесённый в переменную $text. Предполагая, что работаем с кодировкой Юникода UTF-8, решить типовые задачи по обработке текста:

1. Разделить текст по строкам.

2. Разделить текст по предложениям.

3. Разделить текст по словам.

4. Разделить текст по символам.

5. Разделить текст по нескольким возможным разделителям (на примере точки и запятой).

6. Разделить текст на равные по количеству символов части.

<?php
$text = "Вселенная – некоторые называют ее Библиотекой – состоит из огромного, возможно,
бесконечного числа шестигранных галерей, с широкими вентиляционными колодцами, огражденными 
невысокими перилами. Из каждого шестигранника видно два верхних и два нижних этажа – до 
бесконечности. Устройство галерей неизменно: двадцать полок, по пять длинных полок на 
каждой стене; кроме двух: их высота, равная высоте этажа, едва превышает средний рост 
библиотекаря. К одной из свободных сторон примыкает узкий коридор, ведущий в другую 
галерею, такую же, как первая и как все другие. Налево и направо от коридора два крохотных
помещения. В одном можно спать стоя, в другом – удовлетворять естественные потребности. 
Рядом винтовая лестница уходит вверх и вниз и теряется вдали. В коридоре зеркало, 
достоверно удваивающее видимое. Зеркала наводят людей на мысль, что Библиотека не бесконечна 
(если она бесконечна на самом деле, зачем это иллюзорное удвоение?); я же предпочитаю думать, 
что гладкие поверхности выражают и обещают бесконечность… Свет дают округлые стеклянные плоды, 
которые носят название ламп. В каждом шестиграннике их две, по одной на противоположных стенах. 
Неяркий свет, который они излучают, никогда не гаснет. Как все люди Библиотеки, в юности я 
путешествовал. Это было паломничество в поисках книги, возможно каталога каталогов; 
теперь, когда глаза мои еле разбирают то, что я пишу, я готов окончить жизнь в нескольких 
милях от шестигранника, в котором появился на свет. Когда я умру, чьи-нибудь милосердные руки 
перебросят меня через перила, могилой мне станет бездонный воздух; мое тело будет медленно 
падать, разлагаясь и исчезая в ветре, который вызывает не имеющее конца падение. Я утверждаю, 
что Библиотека беспредельна. Идеалисты приводят доказательства того, что шестигранные помещения 
– это необходимая форма абсолютного пространства или, во всяком случае, нашего ощущения 
пространства. Они полагают, что треугольная или пятиугольная комната непостижимы. (Мистики 
уверяют, что в экстазе им является шарообразная зала с огромной круглой книгой, бесконечный 
корешок которой проходит по стенам; их свидетельства сомнительны, речи неясны. Эта сферическая 
книга есть Бог.) Пока можно ограничиться классическим определением: Библиотека – это шар, 
точный центр которого находится в одном из шестигранников, а поверхность – недосягаема. 
На каждой из стен каждого шестигранника находится пять полок, на каждой полке – тридцать 
две книги одного формата, в каждой книге четыреста страниц, на каждой странице сорок строчек, 
в каждой строке около восьмидесяти букв черного цвета. Буквы есть и на корешке книги, 
но они не определяют и не предвещают того, что скажут страницы?! Это несоответствие, я знаю, 
когда-то казалось таинственным."; //31 строка

//1
$array = explode("\n", $text);
echo '<hr>1) '; print_r($array);

//2
$res = str_replace("\n", '', $text);
$array = preg_split('/(?<=[.?!])\s+(?=[a-zа-яё])/i', $res);
echo '<hr>2) '; print_r($array);

//3
$res = preg_replace("/[^a-zа-яё0-9\s]/ui", '', $text);
$array = preg_split('/(\s)/', $res);
$array = array_diff($array, []);
echo '<hr>3) '; print_r($array);

//4
$array = mb_str_split($text,1,'UTF-8');
echo '<hr>4) '; print_r($array);

//5
$array = preg_split("/[\.|\,]/u", $text, -1, PREG_SPLIT_NO_EMPTY);
echo '<hr>5) '; print_r($array);

//6
$n = 100; //длина фрагмента (в реальности в Windows будет на 2 меньше из-за \CR\LF)
$array = mb_str_split ($text,$n,'UTF-8');
$array = array_chunk($array, $n);
echo '<hr>6) '; print_r($array);
?>

Код выполнялся на локальном хосте XAMPP с PHP 8.X.

14.09.2022, 19:31 [382 просмотра]


теги: учебное php textprocessing список

К этой статье пока нет комментариев, Ваш будет первым