Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
दुनिया का सबसे बड़ा मंच बनेगा ई-मार्केटप्लेस #GeM
GeM ने चालू वित्त वर्ष 2024-25 की पहली तिमाही (अप्रैल-जून) में शानदार शुरुआत की है। GeM के माध्यम से पहली तिमाही में वस्तुओं एवं सेवाओं की खरीद 1.24 लाख करोड़ रुपये को पार कर गई है।
42 века за 25 долларов
«Солдаты! Эти памятники с высоты сорока веков смотрят на вас!», говорил своим гвардейцем, изнывающим от жары в медвежьих шапках, Бонапарт.
Со времён рейда Наполеона прошло уже 200 лет, поэтому на нас смотрят уже 42 века.
Первого ноября в Гизе открылся новый Большой египетский музей, или Grand Egyptian Museum (аббревиатура - #GEM ).
GEM - это 500 000 кв м экспозиции, более 100 000 экспонатов. Всё, что пылилось в старом музее на каирском Тахрире в запасниках, из-за недостатка площадей, теперь выставлено на обозрение. Да и разве в цифрах, которые,безусловно, впечатляют,дело.
Музей действительно впечатляет масштабами,под стать великим пирамидам, которые прекрасно видны из его панорамных окон.До пирамид Гизы всего два километра и туда можно пройти сразу из музея.Одиннадцатиметровая статуя Рамзеса Второго (местные говорят "Рамзи")кажется не больше человеческого роста на фоне высоких сводов атриума.
Главная звезда экспозиции - полная коллекция Тутанхамона с 5000+ предметами: знаменитая золотая маска, ранее хранившаяся в Каирском музее на Тахрире.Экспонаты разбиты по династиям: от Старого царства с пирамидами Джосера и Менкаура до Нового царства с Рамсесом Вторым.
Проект рисковал и вовсе не состояться.Ведь пока строили музей (начинали в 2005 году),свергли бессменного Хосни Мубарака, уморили в тюрьме президента-ихвана Мурси, и уже долгое время на троне местный спецслужбист Фаттах Ас-Сиси. Он недавно благополучно продлил полномочия и Египет вступил в бесконечную эпоху развития, мира и процветания.
Финансировали строительство японцы, проектировали и строили западные компании но через местного инфраструктурного гиганта Hassan Alam.Не знаю, кто строил пирамиды, но сейчас всё, что сложнее общестроя в Египте не обходится без иностранцев.
Величие нынче стоит недёшево, на музей ушло около миллиарда долларов. Были голоса осуждения, мол страна далеко не самая богатая, массы бедняков в буквальном смысле живут на улице. Зато теперь есть и музей и бедное население, а так бедное население было бы без музея и без 1млрд$ гарантировано.
По поводу знаменательного, без иронии,события Ас-Сиси организовал грандиозную церемонию, с гостями из десятков стран вплоть до глав государств. Оперное пение,симфонический оркестр, специально написанная сюита, исполняемая одновременно в Гизе, в Рио-де-Жанейро,Нью-Йорке,Мельбурне, Париже и Токио (транслировали одновременно, через телемост).
Пафосную речь произнесла египетская красавица Ясмины Эль Абд. В панегирике в один ряд встали великие пирамиды и цивилизация древнего Египта, греческое наследие, халифат и конечно же Ас-Сиси с его New Capital - новой столицей, помпезным проектом выноса всей египетский администрации в новый город, построенный в пустыне в 60 км от старого Каира (город правда почти пустой, если не считать уже перенесенные минестерства).
Очень довольный Ас-Сиси с супругой, внимающий перипетиям перфоманса, главная задача которого поставить его в ряд с фараонами, это само по себе отдельный перфоманс.
Но самолюбование новых фараонов не портит картинки, ведь это Египет,здесь это в порядке вещей тысячи лет.Новость хорошая, музей получился уникальный, его обязательно стоит посетить, если уже собрались в Каир.
Мой совет: когда насладитесь музеем (удовольствие стоит 25$) и пройдете к пирамидам, к вам будут лезть навязчивые местные смугляши, будут предлагать проехаться на бричке, сфотографироваться, влезть на верблюда, купить этническую ветошь. Делать это будут на всех языках мира с правдивым взглядом сочинского таксиста. Услышав, что вы из России, сильно воодушевятся и вспомнят российского президента, всячески подчёркивая силовые характеристики последнего.
Просто не реагируйте, даже не смотрите в сторону назойливых цыганойдов, сконцентрируйтесь на сорока веках, смотрите вокруг, оно того стоит.
#GEM удачный бренд, слово gem - это ещё и драгоценный камень. Музей стал идеальным дополнением к пирамидам, прекрасное приобретение для Египта и всех, кто интересуется историей.
Сорок два века за 25 долларов, надо брать!
видео в первом комментарии 👇
#ОткрытияNegoro
ГЕМИНИДЫ: ПРОЧНОСТЬ И СВЯЗЬ С АСТЕРОИДОМ
Пик Геминид пройден ушедшей ночью (ZHR ~ 100). Удалось пронаблюдать?
****
Этот рой примечателен не только тем, что является самым мощным среди регулярных потоков, но также своим прародителем - не кометой, но необычным астероидом (3200) Фаэтон.
Объект ещё иногда называют "каменной кометой", т.к. приближаясь к Солнцу, Фаэтон разогревается до 750 °C, растрескивается и теряет вещество. Правда, его слишком мало, чтобы пополнять метероидный рой, который, вероятно, родился в ходе катастрофы в недалёком прошлом.
****
В связи с этим частицы Геминид значительно плотнее и прочнее в сравнении с порождёнными кометами, а значит, они глубже, при прочих равных, проникают в нашу атмосферу.
Вот этот график от НАСА показывает, что декабрьские метеоры в среднем горят до 70 км над землёй, в то время как Персеиды с их в ~4 раза меньшей плотностью (0.37 г/см3 против 1.39 у Геминид) заканчивают светиться на 15-20 км выше.
Инфографика: NASA
Источник фото
#GEM#Phaethon
#announce#gem
Ирина Горячева. С древнеегипетского языка на дизайнерский. Опыт работы в GEM.
Место: ZOOM
Дата и время: 12 ноября
🕕 Начало: 18:00 — Каир и Иерусалим | 19:00 — Москва | 17:00 — Берлин
⏱️ Продолжительность: около 1 часа + время на вопросы
🍀Запись будет
*Участие бесплатно, но будем рады поддержке🙏.
Регистрация по ссылке
The integration of eGramSwaraj & Government eMarketplace (#GeM) on 24th April 2023 will create new avenues for village-level entrepreneurs
#NayeBharatKiPanchayat#SamaveshiVikaas
🎙 NEW GEM #FINE
I think here is big potential to grow, marketing incoming. 🆘Be careful, put small bag here.
Marketcap: 9.5 MIL $
Price now: 0.000000023618598849591634 $
1️⃣Dextool trending working, order Dextool Trending
2️⃣Big marketing Campaign incoming
✅ More information
Telegram: https://t.me/+YIevhi57q2phY2Y6
Website:https://www.finerc.vip/
👉 BUY HERE: https://www.dextools.io/app/en/ether/pair-explorer/0xb54ce26f2e30f64c5b684b141311ce138ab5e00e
🧨 Push cooperating with@Whales100xsignals
#MEMECOIN#GEM