Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Some news sources say that the price of internet has increased in some Muslim countries.
Social networks and individual media have become an important tool to deal with the #Zionists. Because the state media is under the control of the #Jews. Official and government news agencies publish selected news in favor of the Zionists. But social networks publish real news.
Individual media are putting pressure on Israel. They have increased the price of the Internet to reduce the activity of individual media.
Every word and picture published against the Zionists will hit the body of #Illuminati and #Freemasonry like a bullet.
https://t.me/YediotNewsChat
Абакуа — карибские «масоны» Кубы.
Пожалуй, самым необычным явлением, которое подарила нам Куба, является инициатическое братство Абакуа, которое также называют афро-кубинским масонским орденом Карибали по месту происхождения. Абакуа или Карибали берет свое начало в Западной Африке, в тайном обществе Экпо (Экбе, Экбо пишут везде по разному), где поклонялись духу Экпе. Это общество было одним из многих подобных сообществ Африки. И, пожалуй, наименее кровожадным, имело уровни посвящения, большой интерес к обмену опытом с другими народами и торговле, отчего стало быстро смешиваться с масонством еще на африканском континенте. Также на эту традицию оказали влияние общества леопардов и крокодилов, о чем мы можем поговорить отдельно, как и о многочисленных кровавых африканских и карибских тайных обществах, среди которых особо выделяются женские.
Если это интересно, напишите в комментариях.
Несмотря на то, что Абакуа являются отдельным орденом и никоим образом не связаны с европейским масонством, по мере развития и роста этой традиции на Кубе многие абакуа стали масонами, как и члены иных афро-кубинских религиозных традиций, таких как вуду.
Произошла взаимная интеграция: символов, практик, философии.
Посвятительные братства Абакуа первоначально были распространены среди чернокожих рабов, которых завозили на Кубу плантаторы. Братство служило, как инструмент для развития торговли между своими членами, налаживания связей и сыграло свою роль в борьбе за освобождение Кубы от Испании.
Масоны Кубы очень сочувственно относились к рабам и вовлекли движение Абакуа в борьбу с испанцами на ранних этапах становления республиканского движения, тесно переплетенного с масонством. Многие масонские лидеры освобождали своих рабов, занимались среди них просветительской и социальной работой.
В обрядах и пантеоне Абакуа присутствует странная смесь из католицизма, масонства и различных африканских традиций, известных как Экпе, Нгбе и Угбе. Леопард, наравне с Исусом и крестами, является символом духовной власти в общине. Обряд инициации повторяет масонскую, естественно, с африканским и католическим колоритом. Посвященный объявляется Hombre, что по-русски будет звучать, как "настоящий мужик". Hombre — это тот, кто воплощает в себе достоинство человека, доброго труженика, верного брата, весельчака и борца с несправедливостью, соблюдающего моральный кодекс, установленный предками, основателями Абакуа. Членов общины, называют также Ньяниго. Они должны быть хорошими отцами, хорошими сыновьями, братьями и друзьями.
Несмотря на то, что Абакуа не входит официально в регулярное масонство и не признано большинством европейских масонов, на Кубе члены Абакуа срослись с масонством и являются своего рода афро-кубинскими ложами, а нынешний Великий Мастер Великой Ложи Кубы, работающей по ДПШУ, является также видным членом Абакуа.
На фото: костюмы жрецов Абакуа из кубинского национального музея, алтарь в храме Абакуа и рисунок церемонии посвящения.
#абакуа#abakua#freemasonry#кубинскоемасонство#карибскоемасонство#афрокарибы