Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
11-ый стал агрегатором
Интересно, как все топовые компании, выпускающие свои модели, потихоньку переходят на агрегаторский вид бизнеса.
На мой взгляд, это замечательная новость.
Почему так думаю:
Сколько компаний — столько и UX-приколов: ниша молодая, интерфейсы разные, и это со временем рождает всё более удобный опыт. Рано или поздно придумают действительно удобный формат.
Это цена: когда все придут к одинаковым интерфейсам и набору моделей, начнётся демпинг за привлечение клиента — что тоже нам на руку.
😂 Что думаешь? Найс или не найс?
#11labs | AcidCrunch
#11labs релизнули speech-to-speech можно менять свой голос на любого другого персонажа. Пока мне не очень понятны юзкейсы помимо продакшена рекламы/кино.
🔵#11Labs выпустили тестовую AI для генерации звуковых эффектов из текста (видимо готовятся к озвучке видео из #Sora). Теперь, если вы можете что-то представить, то вы можете это “озвучить”.
🎤#AI активно врывается в музыкальную индустрию. За последние месяцы протестировал множество продуктов, и уже текущие возможности поражают. 🎙
Конечно, для большинства людей, которые слушают музыку и смотрят фильмы, эта индустрия далекая и не понятная. Однако #AI сегодня может сделать из вас музыканта и исполнителя на уровне мировых звезд. Как только вы прикоснетесь к этой индустрии, вы поймете о каких возможностях я говорю. А пока перечислю все фичи, которые уже возможны в том или ином качестве в #musicAI:
- Драматическое улучшение качества аудио. Даже самое зашумленное аудио со звуком отбойного молотка и стройки выводится на уровень записи в студии с микрофоном. (голос уже не чистится как раньше, а генерируется заново)
- Разделение любого звука (музыка/лайв запись) на звуковые дорожки (музыка, голос, шум) и отдельное управление каждой
- Замена вашего голоса в музыкальном произведении (вы даете ссылку на youtube клип и вот этот клип уже исполняете вы, не шучу, так и работает)
- Напойте мотив, типа та-та-та и AI напишет вам музыкальный трек с нужным набором муз.инструментов
- По промпту пишется полностью музыка и исполнение в запрошенном стиле
- По видео #AI понимает, какое музыкальное сопровождение или спецэффекты нужно вставить
- Прям в аудио интервью можно заменять текст или отдельные слова, который произносит спикер (почему-то китайцы в этом направлении самые сильные)
- Voice-to-text и text-to-voice (этим уже все наигрались с апишками #11labs и #openAI)
В целом все движется к большому буму индивидуальных исполнителей в музыке, когда каждый из вас сможет записать промтом свой собственный музыкальный альбом и выйти в #itunes и на муз-тв.
Представьте, как изменится музыкальная индустрия, когда твои треки будут в топ музыкальных чартов, только потому, что ты читаешь мой канал и правильно написал промпт 😏
🆒А теперь, ожидаемый дроп главных сервисов: Suno, Musicfy, Kits.
🌐Like and Share🌐