Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Специальный #ska - репортаж с юбилейного 666-го (плюс-минус) концерта группы CWT - @ cwtimes - в честь 20-ти летия группы #ClockworkTimes - агнищенская атмосфера, закулисные мохнатые шутки, а также слезоточивые тосты от близких - всё это в овердоузах на моём странном ютуб канале -tranklife
https://youtu.be/YmhzrKOHvEo
https://youtu.be/YmhzrKOHvEo
https://youtu.be/YmhzrKOHvEo
Ну и по традиции вертикалочка для Добрых Людей выживших в инсте 🤘🏻
Horace Andy — Midnight Rocker (On-U Sound, 2022)
#reggae#dancehall#dub#roots_reggae#ska#Jamaica
Мало кто из певцов сумел так точно зафиксировать эволюцию звучания даба, как Хорас Энди. Его уникальный голос украшал не только классические регги-пластинки, записанные с продюсером Ли «Скретч» Перри в 1970-е годы, но и мрачные треки Angel,Spying Glass и Five Man Army культовой трип-хоп группы Massive Attack.
Midnight Rocker — первый опыт сотрудничества Хораса с пионером британском даба Адрианом Шервудом. В дополнение к новым композициям, проект включает в себя переосмысление ранних работ Энди, таких как Mr. Bassie, This Must Be Hell, Materialist, Money Money и Rock To Sleep. Кроме того, в альбом вошла кавер-версия ранней песни Massive Attack«Safe From Harm».
На этой пластинке Эдриан Шервуд выдвигает на первый план вокал Хораса, обращая внимание слушателя на то, как он изменился с годами. Например, в оригинальном исполнении This Must Be Hell 1978 года характерный для рутс-регги вокал перекликается с саксофонной партией из знаменитой композицииTake Five Дэйва Брубека. Бас звучит довольно громко, но все-таки инструментальные мелодии занимают много места в аранжировке и придают песне расслабленный беззаботный настрой. В новой интерпретации Шервуда композиция звучит более сдержанно и задумчиво, с акцентом на ритм и глубокий тенор Энди, в котором с возрастом появились новые оттенки и легкая хрипотца.
Spotify | AppleMusic | Bandcamp
8 марта праздничный концерт двух африканских групп столицы в Китайском Летчике Джао-Да
#afrobeat#reggae#ska#zouk#rumba#soukous
Kimbata исполняет музыку Центральной Африки. Основной репертуар Kimbata состоит из традиционных композиций народов баконго и песен солиста группы, коренного конголезца Андре Нцумба Пеленда. Помимо африканской румбы, в творчестве Kimbata замешаны афробит, пачага, ндомболо, реггей, зук, сукус, ньюс рутс и ска. Zava Matotra – московский коллектив с интернациональными корнями собрался в 2013 году на фоне интереса к африканской музыке. Творчество группы началось с каверов на африканскую эстраду 70-х годов: оркестр Black Santiago из Ганы, Махмуда Ахмеда из Эфиопии, Муссу Думбию из Мали и других. В 2019 году группа записала альбом авторской музыки. В результате получился сплав таких стилей, как румба, афробит, регги, фанк, инди и сукус.
Начало: 19:00
Цена: 600 рублей
Адрес: Лубянский проезд, дом 25, стр. 1, Москва
Телефон: +7(495)624-56-11
Заказ билетов
Gypsy Ska Orquesta — Sabarabulé (2020)
#ska#reggae#balkan#cumbia#swing#gypsy#jazz#Venezuela
Gypsy Ska Orquesta родилась на улицах Каракаса, Венесуэла. Музыка группы представляет собой необычное сочетание ска, кумбии, свинга и цыганской музыки Балканского полуострова. Их последний студийный альбом Sabarabulé был записан и спродюсирован Альберто Переса в Барселоне осенью 2019 года. На композиции Mandibuleo отметилась немецкая кларнетистка Фридерика фон Оппельн-Брониковски из группы Herje Mine, исполняющей балканскую музыку.
Spotify | AppleMusic | Bandcamp