Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Nora Brown — Long Time To Be Gone (Jalopy Records, 2022)
#traditional#appalachian#banjo#United_States
Нора Браун специализируется на традиционной музыке Южных Аппалачей и мастерски владеет банджо и гитарой. В детстве она обучалась игре на банжо у звезды американского фолк-ривайвла Джона Коэна, а также у не менее известных фолк-исполнителей Джорджа Гибсона, Ли Секстона и Арта Розенбаума. Long Time To Be Gone — третий альбом Норы, записанный в церкви Святой Анны, возведенной в Бруклин-Хайтс в конце XIX века.
Помимо велеколепной акустики церкви Святой Анны, Long Time To Be Gone примечателен уникальным набором инструментов, каждый из которых связан с музыкальной родословной Браун. Среди инструментов Норы — банджо Luscomb 1888 года, принадлежавшее её прапрадеду; безладовое банджо, изготовленное её отцом; и пятиструнное банджо, на котором когда-то Роско Халкомб записал свой альбом High Lonesome Sound. Роск Халкомб общался с учителем Норы, Джоном Коэном, а его музыкой в свое время восхищался даже Боб Дилан. Теперь его пятиструнное банжо хранится в Библиотека Конгресса США, но на время записи попало в руки к Норе.
🔗Spotify | AppleMusic | Bandcamp
Inger Nielsen — Inger Nielsen Sings Danish Folk Songs (Folkways Records, 1965)
#traditional#guitar#banjo#Denmark
Ингер Нильсен записала этот альбом в Нью-Йорке в 1965 году по настоянию своего бойфренда, фолк-музыканта и артиста Folkways RecordsПитера Ла Фаржа. На гитаре и банджо ей аккомпанирует Барри Корнфельд.
Сначала режет слух соседство патриотических произведений композитора Карла Нильсена — Denmark in a Thousand Years и Our Home, You Danish Earth — с песнями о повседневности и личных трагедиях. Однако на контрасте гимны теряют холодный официоз. Они начинают звучать как часть той же жизни, что дышит в историях простых людей.
Так, Limfjorden посвящена красоте фьордов и жизни у их берегов. The Roadmaker — история мастера, посвятившего жизнь работе с камнем, но так и не удостоившегося надгробия на собственной могиле. Saturday Evening — трагическая песня о девушке, напрасно ждавшей возлюбленного и увидевшей его на следующий день в церкви уже с другой.
На сборнике есть несколько песен о детстве: Mother and a Child, колыбельная Ганса Христиана Андерсена, и Born in Jutland, воспоминание о юношеских годах, проведённых в Ютландии. Есть и песня на ютландском диалекте о любви пастуха и пастушки — Mads Doss.
Песня Roselil рассказывает о юноше, который развесил золотые кольца на деревьях в саду своей возлюбленной. Та поклялась, что не будет верна ни одному мужчине, пока не зацветут золотые цветы. Фольклорная фантазия звучит и в The Gold Dice — балладе о цыгане, выигравшем в кости руку принцессы и её царство.
Завершающая композиция, En lærke letted («Взлетел жаворонок»), посвящена освобождению Дании после Второй мировой войны. Жаворонок здесь символизирует не только весну, радость и надежду, но и саму страну. Какое-то время эта птица считалась символом Дании, но потом уступила место лебедю.
🔗Spotify | Telegram
Oak and Ivy — Holler (Self-Released, 2024)
#traditional#field_recording#appalachian#oldtime#clawhammer#banjo#United_States
Holler — сольная акустическая запись, сделанная ночью в Аппалачах. В альбом вошли традиционные песни региона, исполненные без студийной обработки, в живой и непосредственной манере. Среди них, например, — The Cuckoo, английская народная песня, получившая широкое распространение в Северной Америке, и Cluck Old Hen, один из старейших образцов аппалачского репертуара, впервые записанный в 1923 году Фиддлином Джоном Карсоном, но известный в устной традиции как минимум с 1886 года.
🔗Bandcamp | Telegram
Various Artists — Industrial Strength Bluegrass (Folkways Records, 2021)
#traditional#bluegrass#banjo#fiddle#mandolin#appalachian#Ohio#United_States
Industrial Strength Bluegrass рассказывает о том, как выходцы из Аппалачей, переехавшие на юго-запад Огайо в середине XX века, принести с собой музыку блюграсс и вплели её в ритм индустриального города. Песни альбома отражают жизнь мигрантов, проходящую между заводскими цехами и субботними вечерами с банджо; передают ностальгию по родным горам; показывают, как блюграсс адаптировался в новом окружении, не теряя своей музыкальной сути.
Альбом спродюсировал музыкант и радиоведущий Джо Маллинз, а в записи приняли участие многие звезды современного блюграсса, включая Ронду Винсент,Бобби Осборна и самого Маллинза. Расширенное виниловое издание альбома включает архивные записи The Stanley Brothers,Larry Sparks,Red Allen & The Allen Brothers, которые помогают еще глубже погрузиться в музыкальный контекст «индустриального блюнрасса».
🔗AppleMusic | Spotify | YouTube | Deezer | TIDAL | Bandcamp
Jerron Paxton — Things Done Changed (Folkways Records, 2024)
#blues#oldtime#ragtime#cajun#guitar#banjo#harmonica#United_States
Джеррон Пакстон — мультиинструменталист из Лос-Анджелеса, выросший в семье выходцев из Луизианы. Он исполняет блюз, рэгтайм, олдтайм и каджунскую музыку — локальную традицию Луизианы, возникшую среди франкоязычного населения и вобравшую в себя элементы французского фольклора, креольной культуры и ритмики африканской диаспоры.
Семья Пакстона перебралась в Калифорнию после убийства Эмметта Тилла — четырнадцатилетнего подростка, линчёванного в Миссисипи в 1955 году после обвинения со стороны белой женщины. Убийство Эмметта Тилла получило широкую огласку и стало поворотным моментом в истории борьбы за гражданские права чернокожих в США. Многие афроамериканцы после этого предпочли уехать с Юга, и Южный Лос-Анджелес, куда попали родственники Пакстона, стал одним из новых центров их жизни — не чужим, а скорее пересобранным Луизианским югом на новом месте.
Things Done Changed — первый альбом Джеррона Пакстона, целиком состоящий из авторских песен. При этом, как и предыдущие работы музыканта, он выдержан в стилистике традиционной афроамериканской музыки первой половины XX века. Музыкальные интересы Пакстона начали формироваться ещё в детстве — он подолгу слушал радио, стараясь уловить манеру исполнения, структуру старинных песен и их скрытые смыслы. Со временем он освоил гитару, банджо, фортепиано, скрипку и другие инструменты, звучащие в афроамериканской музыкальной традиции.
На альбоме Things Done Changed Пакстон создаёт авторские композиции, в которых стилистика прошлого становится языком разговора о настоящем. Например, в песне So Much Weed он с иронией и горечью поёт о том, как чернокожие американцы до сих пор отбывают сроки за незначительные правонарушения, связанные с марихуаной, — в то время как в большинстве штатов её продажа уже давно легализована.
🔗Spotify | AppleMusic | YouTube | Bandcamp | Telegram
Tail Toddle — Tot Leeringhe Ende Vermaeck (Stoof, 1977)
#traditional#medieval#ballad#banjo#guitar#dulcimer#bouzouki#epinette#mandolin#Netherlands
Почти никому не известный единственный релиз коллектива Tail Toddler. Группа исполняла средневековые традиционные голландские баллады в сопровождении мандалины и флейты. Гравюра на обложке принадлежит перу Лукаса ван Лейдена и была выполнена в Амстердаме в 1524 году.
🔗Telegram