Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Ravi Shankar — The Sounds of India (Columbia Records, 1968)
#hindustani#raga#sitar#India
Культовый альбом Рави Шанкара, который представляет классическую музыку Северной Индии западному слушателю. В начале альбома Рави Шанкар дает определение раге на английском языке, а затем исполняет ряд композиций, сопровождая их пояснениями о том, как они устроены. Вопреки этому, музыка исполнена очень аутентично. Альбом был вдохновлен работами Али Акбара Кхана, известного исполнителя на сароде и преподавателя классической музыки Северной Индии, и спродюсирован Джорджем Авакяном, одним из продюссеров Майлза Дейвиса.
Spotify | AppleMusic
Baligh Hamdi — Instrumental Modal Pop of 1970's Egypt (Sublime Frequencies, 2021)
#psychedelic#jazz#funk#raga#Egypt
Модальные инструментальные треки Балига Хамди, одного из самых важных арабских композиторов XX века. Он писал музыку для Умм Кульсум, Абделя Халима Хафеза, Сабах, Варды Аль-Джазаирии и многих других арабских певцов. Эта компиляция посвящена одному десятилетию творчества Хамди, в течении которого он заниался в основном западной поп-музыкой с элементами арабской традиции. Помимо этого на сборнике можно услышать гитарные соло знаменитого египетского гитариста Омара Хоршида и подборку индо-арабских композиций на ситаре, представляющих собой встречу ближневосточной и индийской музыки.
Bandcamp | VK
Banaras Baba & Kolkata Kid — From North to South (Epidemic Sound, 2021)
#hindustani#raga#sitar#India#Sweden
После многих лет изучения музыки Индостана, два шведских музыканта, мульти-инструменталист К.Г. Уэстман, он же Banaras Baba, и перкуссионист Хьюго Виден, он же Kolkata Kid, выпустили серию мини-альбомов, посвященных индийской классической музыке. Перед нами второй альбом из этой серии. Несмотря на то, что у музыкантов не было задачи смешивать разные музыкальные традиции, в их работах присутствуют западные инструменты и очень слышно влияние западной музыки.
Spotify | AppleMusic
Charanjit Singh — Synthesizing: Ten Ragas to a Disco Beat (Saregama, 1982)
#raga#acid#house#disco#electronic#India
Чаранджит Сингх — индийский музыкант из Мумбаи, много лет проработавший в Болливуде. В 21 веке он получил известность благодаря релизу 82 года, задуманному как сплав диско с индийскими рагами. На этом альбоме Сингх использовал легендарные синтезаторы TR-808 и TB-303 с функцией «глиссандо», напоминавшей ему индийскую мелодику. Сингх купил TB-303 в Сингапуре вскоре после его появления в конце 81 года. Он потратил много времени на изучение мало кому известного в то время устройства и в конце концов обнаружил возможность синхронизации TR-808 и TB-303 с Jupiter-8. В композицию «Raga Bhairavi» Сингх добавил синтезированный голос, произносящий «Om Namah Shivaya». В результате некоторые современные музыкальные журналисты назвали его самым ранним представителем эйсид-хауса, на пять лет опередившим «каноническую» запись «Acid Tracks» чикагского музыканта Phuture.
SoundCloud
Charanjit Singh — Synthesizing: Ten Ragas to a Disco Beat (Saregama, 1982)
#hindustani#raga#acid#house#disco#electronic#India
Чаранджит Сингх — индийский музыкант из Мумбаи, много лет проработавший в Болливуде. В XXI веке он получил известность благодаря релизу 1982 года, задуманному как сплав диско с индийскими рагами. На этом альбоме Сингх использовал легендарные синтезаторы TR-808 и TB-303 с функцией «глиссандо», напоминавшей ему индийскую мелодику.
Сингх купил TB-303 в Сингапуре вскоре после его появления на рынке в конце 1981 года. Он потратил много времени на изучение мало кому известного в то время устройства и в конце концов обнаружил возможность синхронизации TR-808 и TB-303 с Jupiter-8. В композицию Raga Bhairavi Сингх добавил синтезированный голос, произносящий Om Namah Shivaya. В результате некоторые современные музыкальные журналисты назвали его самым ранним представителем эйсид-хауса, на пять лет опередившим «каноническую» запись Acid Tracks чикагского музыканта Phuture.
🔗Spotify | AppleMusic | SoundCloud | VK | Telegram
Tenderlonious & Jaubi — Tender In Lahore (22a, 2020)
#hindustani#electronic#raga#tabla#flute#synth#Pakistan
В апреле 2019 года Tenderlonious, флейтист, джазовый саксофонист, электронный продюссер и глава лейбла 22a, отправился в Пакистан, чтобы поработать с инструментальным квартетом Jaubi из Лахора, столицы провинции Пенджаб, расположенной всего в нескольких киллометрах от Индии. Эти три импровизированные раги – первые плоды сотрудничества музыкантов.
Spotify | AppleMusic | Bandcamp
Don Cherry — Om Shanti Om (Black Sweat Records, 2020)
#jazz#raga#latin#berimbau#tambura#kora#United_States
Om Shanti Om был записан итальянской компанией RAI в 1976 году, но впервые издан только в этом году лейблом Black Sweat Records. В импровизированных композициях с этого альбома объеденины все знания пионера world-fusion, Дона Черри, полученные им во время многочисленных путешествий по миру. Помимо самого Черри, играющего на флейте, трубе и коре, на записи отметились бразильская перкуссионистка Нана Васконселос, итальянский гитарист Джан Пьеро Прамаджоре и жена Дона, Моника, исполняющая дрон на танпуре. Индийские мантры соседствуют с африканским пением и латниской ритмикой. Запись вышла очень эклектичной, но это тот случай, когда ей это только на руку.
🔗Bandcamp
Tenderlonious — Ragas From Lahore: Improvisations with Jaubi (22a, 2020)
#hindustani#electronic#raga#tabla#sarangi#flute#synth#Pakistan
В апреле 2020 года Tenderlonious, флейтист, джазовый саксофонист, электронный продюссер и глава лейбла 22a, отправился в Пакистан, чтобы поработать с инструментальным квартетом Jaubi из Лахора. Вслед за получившим признание «Tender in Lahore», вышедшим в апреле 2020 года, в результате этой поездки в ноябре 22a выпустил альбом импровизированных раг, записанных в течение одного дня. На этом альбоме структура индийской классической музыки обрамляет импровизационные сессии, в которых приняли участие Tenderlonious на флейте и сопрано-саксофоне, Кашиф Али Дхани на табла, Зохайб Хасан Кхан на саранги, Али Риаз Бакар на гитаре и Марек Пендзивиатр на синтезаторе.
Spotify | AppleMusic | Bandcamp
📺Glass Beams — One Raga to a Disco Beat (A cover of 'Raga Bhairav' by Charanjit Singh)
#psychedelic#funk#hindustani#raga#acid#house#disco#electronic#India#Australia
Австралийцы Glass Beams, выпустившие весной 2024 года нашумевший EP Mahal, записали кавер на композицию Raga Bhairav Чаранжита Сингха с альбома 1982 года Ten Ragas to a Disco Beat.
Оригинальная песня была создана в Мумбаи в 1982 году и является одной из первых записей, в которой звучит басовый синтезатор Roland TB 303, ставший основой для стиля acid house. Чаранжит Сингх в качестве эксперимента хотел записать индийские раги со звуками современных синтезаторлв, но в XXI веке музыкальные критики поняли, что работа композитора опередила время и звучит почти как acid house из Чикаго.
🔗YouTube
Jaubi — Nafs at Peace (Astigmatic Records, 2021)
#hindustani#raga#spiritual#modal_jazz#jazz#hip_hop#boom_bap#United_Kingdom#Poland#Pakistan
В 2016 году лахорский квартет Jaubi отметил десятую годовщину смерти J Dilla кавером его песни Time: The Donut of the Heart. Музыканты рассмотрели ритм песни как талам — перкуссионный каркас раги, вокруг которого выстраивается импровизация. Этот кавер — прекрасное введение в музыкальную философию группы, сочитающую в себе импровизацию классичской музыки Северной Индии и джаз с сэмплированием. Свой подход музыканты раскрывают в дебютном альбоме Nafs at Peace. «Нафс» — арабское слово, означающее «я», «эго» или «душа». Альбом был записан при участии Tenderlonious, лондонского джазиста и главы лейбла 22a, и Latarnik, польского пианиста и участник групп EABS и Błoto. Ранее, в 2020 году, музыканты в том же составе записали альбом импровизированных раг Ragas from Lahore.
🔗Spotify | AppleMusic | Bandcamp