Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Allie Windwick and Hugh Inkster — Music from the Orkney Islands (Folkways Records, 1979)
#traditional#fiddle#guitar#mandolin#Orkney#Scotland#UK
Оркнейские острова — архипелаг в 16 км к северо-востоку от Шотландии. Более семидесяти островов лежат между Великобританией и Шетландскими островами, на границе Северного моря и Атлантики. Раньше здесь говорили на ныне мёртвом языке норн. В настоящее время жители архипелага пользуются оркнейским диалектом англо-шотландского языка или, как выражаются сами островитяне, оркадианским диалектом, включающим большое количество древнескандинавских слов.
Спросите оркнейца, считает ли он себя шотландцем, и вы услышите твёрдое «нет». Хотя формально Оркнейские острова являются частью Великобритании, и их отделяет от Шотландии лишь бурный пролив Пентленд-Ферт, между архипелагом и остальной страной существует нечто большее, чем простая полоса воды. Оркнейцы не забыли о своём скандинавском происхождении. Даже флаг здесь — вариация скандинавского креста. Это наследие, вкупе со спокойным, но упрямым чувством независимости, помогает жителям сохранять неповторимую самобытность своего мира.
На сборнике Music from the Orkney Islands композиторы Элли Виндвик и Хью Инкстер исполняют собственные сочинения и традиционные песни Шотландии, Оркнейских и Шетландских островов, а также Швеции. Виндвик играет на мандолине в девяти композициях, Инкстер — на скрипке в десяти. Нэнси Касселл аккомпанирует на гитаре, а Билли и Ингирид Джолли поют на местном диалекте.
🔗Spotify | AppleMusic | 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
Singers and Ensembles of Radio Ankara — Songs and Dances of Turkey (Monitor Records, 1996)
#traditional#baglama#clarinet#darabukka#fiddle#kaval#kemenche#saz#spoons#zeybek#tamzara#Turkey
Перед нами — энциклопедия турецкой народной музыки, собранная силами Радио Анкары. Турецкая музыкальная традиция вобрала в себя наследие Центральной Азии, Кавказа и десятков народов, прошедших через Анатолию за тысячелетия. В ней легко узнать и античные дорийский, эолийский и фригийский лады, и модернизированную персидскую микротональную традицию, и древние степные напевы.
На записи представлены регионы от восточного Карса, некогда столицы армянского царства, до суфийской Конии в центре страны; от горного Адыямана на юго-востоке до равнинных областей Анатолии. Здесь звучат степенные героические зейбеки (zeybek), звонкий «ложечный» кащик-хавасы (kaşık havası) и круговая тамзара (Թամզարա) — традиционный кавказско-анатолийский танец. Короче говоря, этот проект Радио Анкары соединяет разрозненные голоса и ритмы в целостную звуковую картину Турции.
🔗Spotify | AppleMusic | Telegram
The Brothers Nazaroff — The Happy Prince (Folkways Records, 2015)
#traditional#freilach#klezmer#accordion#mandolin#fiddle#payk#guitar#tzouras#ukulele#yiddish#jew#Ukraine#Russia#United_States
Эта запись — дань уважения Натану «Принцу» Назароффу. В 1954 году в Штатах он выпустил пластинкуJewish Freilach Songs и таким образом познакомил самый широкий круг слушателей с фольклором восточноевропейских евреев. До сих пор работа Назароффа остаётся чуть ли не единственной, на которой представлен музыкальный стиль Одессы и других портовых городов Черного Моря.
Международная супергруппа The Brothers Nazaroff, в состав которой входят Дэниел Кан, Псой Короленко, Майкл Альперт, Джейк Шульман-Мент, Боб Коэн и Хампус Мелин, вдохнула новую жизнь в наследие «Принца». «Братья» уверены, что эти песни заслуживают внимания и особого места в современной еврейской культуре.
Майкл Векс — автор крупнейшего исследования идиша Born to Kvetch. В своих заметках об альбоме Назароффа отмечает следующее:
Если бы в начале 1950-х годов в Америке существовали группы, исполняющие в барах песни на идише, то они звучали бы именно так
Братья Назарофф — как раз такая группа, но только из XXI века.
🔗Spotify | AppleMusic | Bandcamp
Various Artists — Songs and Dances of Yugoslavia (Folkways Records, 1951)
#traditional#accordion#clarinet#fiddle#kaval#tambura#tamburica#violin#gusle#tamburica#Serbia#Bosnia_and_Herzegovina#Montenegro#Croatia#Macedonia#Slovenia#Yugoslavia
В 1951 году музыковед Лора Болтон записала традиционную музыку из всех шести республик бывшей Югославии — Сербии (треки 2, 3, 9, 10, 11 и 13), Македонии (треки 7 и 15), Боснии и Герцеговины (треки 1, 4 и 12), Черногории (трек 8), Хорватии (треки 5 и 6) и Словении (трек 14). На её пластинке представлены вокальные композиции, оркестровые произведения и записи балканских народных инструментов, таких как гусле и тамбурица.
🔗Spotify | AppleMusic