С помощью уже упоминавшегося класса IntlBreakIterator можно легко выделить из текста хеш-теги. Для этого создадим итератор не по предложениям, а по словам с помощью: createWordInstance. Итерация с помощью IntlBreakIterator выдаёт смещения границ слов, что в данном случае не очень удобно. Поэтому воспользуемся методом IntlBreakIterator::getPartsIterator. Он создаёт ещё один итератор, который возвращает уже непосредственно сами слова. Далее, когда встретится символ # (он в режиме WordInstance считается отдельным словом), запоминаем этот факт и следующее слово обрабатываем как хеш-тег. Вот пример кода: Проверка mb_strlen($item)>1 нужна для отработки случаев вида #! #;,так как в этом случае знаки препинания рассматриваются как отдельные слова. Кроме того, хештеги из одной буквы обычно не имеют смысла.
Читать далее…

Был в Сети 23 сент. 2025 г., 03:08
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb, slow lifer.
- Перово, Москва, Россия
- me@4xpro.ru
- XXXXPro
Новости сайта в Telegram
t.me/4x_proКомпьютерное
Автоматическое создание анонса текста на PHP

При создании скриптов для новостей или блогов часто требуется автоматически сформировать анонс из нескольких первых предложений полного текста, не превышающий определённой длины. Типичный подход для этих целей — это выделить с помощью mb_substr начальную часть текста нужной длины, а потом обрезать получившуюся часть до последней точки. Но не все знают, что с версии 5.5 в PHP в модуле intl предусмотрен специальный класс IntlBreakIterator, который позволяет решать эту задачу более эффективно. У него есть несколько статических методов для создания итераторов, позволяющих выделять границы отдельных символов (createCharacterInstance), слов (createTitleInstance и createWordInstance, первый выделяет слова с включением пробелов и знаков препинания после них, второй — рассматривает пробелы и знаки препинания как отдельные слова) и целых предложений (createSentenceInstance). Для нашей задачи потребуется последний.
Читать далее…
Читать далее…