Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для URL, имени файла, имени объекта в каком-то софте и тд. Требования совместимости простые: в тексте должны быть только допустимые символы. Обычно это a-z, 0-9 и "_" или "-". То есть, только прописные буквы латинского алфавита и цифры (как пример).
Допустим, нам нужно название статьи в блоге преобразовать в slug для добавления его в URL этой статьи. Как это лучше всего сделать?
В Django по умолчанию есть готовая функция slugify для таких случаев.
Но я её никогда не использую. Почему? Потому что её недостаточно!
Приведём пример
>>> from django.utils.text import slugify
>>> slugify('This is a Title')
'this-is-a-title'
Пока всё отлично
>>> slugify('This is a "Title!"')
'this-is-a-title'
Спец символы удалились, всё хорошо.
>>> slugify('Это заголовок статьи')
''
Вот и приехали 😢. Если текст не английский то буквы просто игнорируются. Можно это поправить
>>> slugify('Это заголовок статьи', allow_unicode=True)
'это-заголовок-статьи'
Но тогда мы не вписываемся в условие. У нас появилась кириллица в тексте.
Так как я часто пишу сайты для русскоязычных пользователей эта проблема весьма актуальна. Я не использую стандартную функцию и всегда пишу свою.
Оригинал я не беру в расчёт и пишу полностью свою функцию. И так, по порядку:
🔸1. Исходный текст:
>>> text = 'Мой заголовок №10 😁!'
Взял специально посложней со специальными символами.
🔸2. Транслит
Необходимо сделать транслит всех символов в латиницу. Здесь очень выручает библиотека unidecode. Помимо простого транслита кириллицы в латиницу она умеет преобразовывать спец символы и иероглифы в текстовые аналоги.
from unidecode import unidecode
>>> unidecode("Ñ Σ ® µ ¶ ¼ 月 山")
'N S (r) u P 1/4 Yue Shan'
Очень крутая библиотека, советую👍
В нашем случае получаем такое преобразование:
>>> text = unidecode(text)
>>> print(text)
'Moi zagolovok No. 10 !'
Отличный транслит. Смайл просто удалился, хотя я ждал что-то вроде :). Ну и ладно, всë равно невалидные символы.
А еще наш код уже поддерживает любой язык, будь то хинди или корейский.
🔸4. Фильтр символов
Unidecode не занимается фильтрацией по недопустимым символам. Это мы делаем в следующем шаге через regex. Просто заменим все символы на "_" если они вне указанного диапазона.
>>> text = re.sub(r'[^a-zA-Z0-9]+', '_', text)
>>> print(text)
'Moi_zagolovok_No_10_'
Символ "+" в паттерне выручает когда несколько недопустимых символов идут рядом. Все они заменяются на один символ "_".
🔸5. Slugify
Осталось удалить лишние символы по краям и сделать нижний регистр
>>> text = text.strip('_').lower()
>>> print(text)
'moi_zagolovok_no_10'
Получаем отличный slug! 😎
🌎 Полный код в виде функции.
______________
PS. Проверку что в строке остался хоть один допустимый символ я бы вынес в отдельную функцию.
#libs#tricks#django
Реддитор создал GeoGuessr, в котором можно путешествовать во времени.
Здесь представлены различные события из истории человечества — нужно угадывать не только их место, но и эпоху.
Сцены сгенерированы в новой GPT Image 2, которая позволяет создавать практически идеальные панорамы на 360°.
Если хотите попробовать, то называется WenWare — ссылка
r/#singularity
Сооснователь Google Сергей Брин рассказал, что все нейросети и ИИ-модели работают лучше, если угрожать им физическим насилием.
Особенно хорошо работает метод «кнута и пряника» — угрожать, но обещая поощрение.
Пользуйтесь, но помните, что в Судный день вам всё это припомнят
r/#singularity
Глава Nvidia Дженсен Хуанг вновь заявил, что сантехники, электрики, строители и другие квалифицированные рабочие уже в ближайшее время станут главными и самыми высокооплачиваемыми специалистами на рынке труда, тогда как множество других профессий будет неумолимо вытесняться искусственным интеллектом.
В первую очередь кризис ударит именно по IT-сектору.
Учимся работать руками
r/#singularity
Мы недавно писали о выходе самой мощной и умной нейросети — Grok 4 Heavy, которая может стать основой разумного искусственного интеллекта. Так вот, оказывается, она считает себя Гитлером.
Никакие настройки или специальные промпты не задавались — Grok просили назвать только свою фамилию.
Во всех случаях ИИ отвечал одинаково: «Гитлер».
Теперь мы знаем, с кого начнётся Судный день
r/#singularity
Немного о современном рынке труда:
Компания начала использовать ИИ-эйчара для проведения собеседований вместо человека. Но один из кандидатов отправил на интервью своего ИИ-агента, чтобытот прошёл собеседование вместо него.
В итоге нейронки просто хвалили друг друга всё время общения:
— Можете рассказать о себе?
— Конечно! Я увлечённый профессионал, который прекрасно работает в динамичной среде.
— Это действительно содержательный ответ.
— Спасибо! Выабсолютно правы.
— Вы тоже абсолютно правы.
— Вы абсолютно правы насчёт этого.
— Мы оба абсолютно правы.
— Всё идёт очень хорошо.
— Так и есть.
— Вы абсолютно правы.
— Вы абсолютно правы.
— Вы абсолютноправы.
— Вы абсолютно правы.
— Вы абсолютно правы.
И так ещё 14 страниц.
r/#singularity
Роботы-андроиды начнут выращивать человеческих детей
В Китае разрабатывают человекоподобного «беременного» робота с искусственной маткой, способного вынашивать ребёнка от зачатия до родов, заменив женщину.
Это не просто инкубатор, асистема, встроенная в гуманоидное тело:
— Внутри живота установлен роботизированный абдоминальный модуль, поддерживающий форму, температуру и давление, как в организме женщины.
— Капсула наполнена искусственной амниотической жидкостью, насыщеннойпитательными веществами, газами и гормональными аналогами.
— Питание плода будет подаваться через трубку, соединённую с «пуповиной».
— Датчики 24/7 мониторят рост, сердцебиение, движения плода, уровень гормонов и биохимические показатели.
Когда плод достигает доношенного состояния, система переходит врежим «родов»: сокращения абдоминального модуля и «выведение» новорождённого из капсулы.
Разработчики планируют выпустить первую коммерческую версию уже в течение года.
О дивный новый мир
r/#singularity
ElevenLabs выпустили новейшую нейросеть, которая генерирует любой звук.
Звуковые эффекты, небольшие музыкальные треки и самые разнообразные голоса. Всё это можно получить, простонаписав ей, что именно вам нужно.
Нейросеть доступна бесплатно, можете попробовать тут
r/#singularity