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 просмотра]