Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Married at 12
#video#Gypsy
Russian Gypsy boys get married when they’re 10 to 12 years old. Girls tie the knot when they’re a bit older, from 15 to 16. The newlyweds are barely acquainted, but they’ll have a lifetime to get to know each other, as adults say. Kids have no say when it comes to choosing their future spouse. The groom's family has to pay a hefty dowry for the bride. A young wife is expected to take care of most of the household chores. Unlike her husband, a Gypsy wife can't work or study. While other Gypsy traditions are fading away, child marriages live on. This is what a Gypsy wedding looks like.
Follow: https://t.me/rtdocumentary
Christian Escoude & Francis Lockwood — Gypsy Swing (Encore Merci, 2015)
#gypsy#jazz#manouche#France
Цыганский джаз, исполненный в акустическом стиле с использованием аккордеона, скрипки, пианино, гитары и контрабаса. Авторство принадлежит двум мастерам, джаз-мануш гитаристу Кристиану Эскуде и джазовому клавишнику Фрэнсису Локвуду.
Spotify | AppleMusic
Zece Prâjini's Peasant Brass Band — Fanfare paysanne de Zecz Prâjini (Buda Records, 1996)
#traditional#brass#gypsy#Romania
Ансамбль румынской цыганской народной музыки из села Зеце Прэджини под городом Яссы. В музыке коллектива очень много балканской краски. Общий стиль исполнения очень быстрый, традиционный, акустический, но тем не менее напоминающий работы Горана Берговича для фильмов Эмира Кустурицы, для Андерграунда в частности. Частично альбом был записан в 1989 году в концертном зале Филармонического оркестра города Яссы, а частично – во время живого выступления в родном селе коллектива в 1993 году. Альбом входит в серию Musique Du Monde французского лейбла Buda Records, но так же был выпущен в Румынии лейблом Muzeul Țăranului Român под другим названием и с другой обложкой.
🔗Spotify | AppleMusic
Various Artists — My Greatest Revenge: Flamenco Recordings, 1904-1938 (Death Is Not The End, 2024)
#traditional#field_recording#gypsy#flamenco#Spain
Коллекция ранних записей cante jondo («глубокой песни») — основополагающего стиля андалузского фламенко. Cante jondo выделяется своим эмоциональным, проникновенным вокалом и сложным гитарным аккомпанементом.
Фламенко зародилось в фольклорных традициях Андалусии и было сформировано усилиями преимущественно цыган, превратившись в самостоятельное музыкальное явление уже к XVIII веку.
Сборник включает одни из первых записей фламенко, сделанных в начале XX века. Среди исполнителей — El Mochuelo, La Andalucita, Niño de Cabra и Juan Breva, чьи выступления передают меланхоличную и задумчивую атмосферу жанра, несмотря на низкое качество записи, обусловленное техническими ограничениями того времени.
🔗Bandcamp | Telegram
Mandino & Note Manouche — Gypsy Swing From Alsace (Materiali Sonori, 1994)
#gypsy#jazz#manouche#Alsace#France
Мандино Рейнхардт и компания исполняют эльзасский джаз-мануш. Эльзас — историческая область на востоке современной Франции, которая граничит с Германией и Швейцарией. В Эльзасе до какого-то времени был распространен эльзасский диалекте немецкого языка. Там же очень развито направление цыганского джаза. Есть даже большое интервью с Мандино Рейнхардтом для журнала Jazz & Culture об этом направлении в Эльзасе.
🔗Spotify | AppleMusic
Mólo Sâyat — ĦADÃEQ (Zephyrus, 2021)
#jazz#gypsy#klezmer#oud#Belgium#Lebanon
В 2010 году группа студентов киношколы в Брюсселе начала исполнять приправленные джазом традиционные средиземноморские песни: от греческих, итальянских и балканских до ливанских и египетских. Руководил проектом саксофонист Mathieu Najean, а место вокалиста занял ливанский певец Pôl Seif. Выпустив свой первый альбом Burj Babil в 2012 году, Mòlo Sâyat отыграли бесчисленное количество концертов в Европе и съездили в тур по Канаде. В 2015 году группа взяла перерыв, но снова собралась в Ливане в 2019 году. Результатом стал новый альбом Hadaeq, на котором нашлось место и средиземноморскому и фолку, и клезмеру, и французскому шансону. На нём можно услышать звучание арабского уда, ближневосточной перкуссии и нечетные музыкальные размеры.
Spotify | AppleMusic | Bandcamp
Gypsy Ska Orquesta — Sabarabulé (2020)
#ska#reggae#balkan#cumbia#swing#gypsy#jazz#Venezuela
Gypsy Ska Orquesta родилась на улицах Каракаса, Венесуэла. Музыка группы представляет собой необычное сочетание ска, кумбии, свинга и цыганской музыки Балканского полуострова. Их последний студийный альбом Sabarabulé был записан и спродюсирован Альберто Переса в Барселоне осенью 2019 года. На композиции Mandibuleo отметилась немецкая кларнетистка Фридерика фон Оппельн-Брониковски из группы Herje Mine, исполняющей балканскую музыку.
Spotify | AppleMusic | Bandcamp
Petrojvic Blasting Company — A History of Public Relations Dilemmae (Self-released, 2010)
#gypsy#brass#jazz#accordion#balkan#trombone#trumpet#tuba#United_States
Единственный альбом цыганской группы из Лос-Анджелеса, основанной братьями Джастином и Джошем Петройвичами. Музыка группы сочетает в себе элементы традиционного джаза и звуки исторической родины братьев, балканского полуострова. Хотя у Blasting Company есть один альбом с своими песенями, записанный уже десять лет назад, группа исполняет традиционную балканскую музыку и предпочитает живые выступления на свежем воздухе. Petrojvic Blasting Company также принимали участие в написании ряда саундтреков, самый известный из которых — к мультфильму Патрика Макхэйла «По ту сторону изгороди».
🔗Spotify | AppleMusic
Мамуля!С Твоим Днём❤️Ты всё знаешь✨А эта фотокарточка лучше всех слов выражает наше мощное суперПартнёрство!👭Мы тебя очень любим!Будь Мамчик..будь счастлива!💫
#mom#birthdaymom#birthdaygirl#happybirthday#сднемрождения#именинница#ларико#нуцка#лялися#мамчуля#мамико#лариска#gypsy#мама#сднемрождениямамы#мамампосвящается#июль#positivevibes#moodoftheday#photooftheday#youngandbeautiful#purelove#heavenonearth