Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🎓
⚡️“Toshkent” Respublika fond birjasi boshqaruvi raisi - Georgiy Paresishvili tomonidan: “O‘zbekistonda kapital bozorining rivojlanishi: muammolar va istiqbollar” mavzusidagi ma’ruza bo‘lib o‘tdi.
🇺🇿UZB
Георгий Паресишвили - председатель правления Республиканской фондовой биржи "Тошкент" провел лекцию на тему "Развитие рынка капитала в Узбекистане: вызовы и перспективы"
🇷🇺RU
Georgiy Paresishvili, Chairman of the Board of the Republican Stock Exchange "Tashkent", delivered a lecture on the topic "Development of the Capital Market in Uzbekistan: Challenges and Prospects."
🇬🇧ENG
#GraduateSchool#GuestLecture
Web-site | Telegram | Facebook |Instagram
🎓“Toshkent” Respublika fond birjasi boshqaruvi raisi - Georgiy Paresishvili tomonidan:
“O‘zbekistonda kapital bozorining rivojlanishi: muammolar va istiqbollar” mavzusidagi ma’ruza bo‘lib o‘tadi.
Batafsil:
🗓️19-Yanvar
⏰ 10:30
📞 +998 71-239-03-01
#GraduateSchool#GuestLecture
Web-site | Telegram | Facebook |Instagram
👥Бейсенбідегі жұмыс күнін өте қызық әрі пайдалы дәріспен қорытындыладық.
⠀
Guest Lecture жобасының алғашқы қонағы — Бельгия Корольдігінің Қазақстандағы Елшісі Анри Вантигем «1830-1936 жылдардағы Бельгия нейтралитеті» тақырыбы аясында дәріс оқыды. Кездесуде Бельгия тарихы, сыртқы саясаттағы бағдары және «мәңгі бейтараптығы» туралы тарихи-танымдық мол мәлімет айтылды.
⠀
Дәріс үшін Елші мырзаға зор алғыс білдіреміз!
__
👥Thursday concluded with an interesting lecture as part of the «Guest Lecture» series.
⠀
The first guest lecture had, as its speaker, the Ambassador of the Kingdom of Belgium to the Republic of Kazakhstan, Mr. Henri Vantieghem, who gave a lecture on the topic «Belgian neutrality in 1830-1936». During the meeting, a lot of historical and educational information was presented about the history of Belgium, the country’s foreign policy and it’s «eternal neutrality».
⠀
We express our gratitude to Mr. Ambassador for the lecture!
⠀
#ҚҚДИ#KIPD#GuestLecture
Qora tuynuklar haqida ko'proq bilishni istaysizmi?
✅ "Yangi O'zbekiston" universitetida dunyoda 44-o'rinda turuvchi Fudan universitetidan kelgan professor Cosimo Bambi tomonidan Qora tuynuklar bo'yicha ma'ruza tashkil etiladi.
🌌 Ushbu ma'ruzada ishtirok etib, siz qora tuynuklar bo'yicha yangi bilimlar olishingiz yoki mazkur sohada ko'p yillik tajribaga ega professordan o'zingizni qiziqtirgan savollarga javob olishingiz mumkin.
🗓Vaqti: 6-dekabr, 14:00
📍Manzil: MATH bino, 105-xona
➖ Cosimo Bambi "Yangi O'zbekiston" universitetining ilg'or tadqiqotchi-olimlaridan biri hisoblanadi.
📌Barcha talabalarimiz ma'ruzada ishtirok etishlari mumkin.
🔁English
➖➖➖➖➖➖➖➖➖➖➖➖➖
#qora_tuynuklar#guestlecture
⬇️Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
👤Сегодня в стенах института состоялась гостевая лекция на тему «Когнитивный капитал страны: как есть и что делать?»
Лектором выступил Мухит Елеуов - партнёр юридической фирмы ADL Disputes, выпускник Гарвардской школы государственного управления им. Джона Ф. Кеннеди, PhD.
В ходе встречи обсуждалась роль когнитивного капитала как ключевого фактора конкурентоспособности страны: понятие интеллекта и его значение. Рассмотрены современные научные подходы к его изучению.
В обсуждении приняли участие сотрудники института, а также представители научного сообщества.
Институт выражает благодарность Мухиту Елеуову за содержательную лекцию!
#ҚҚДИ#ҚҚДИ#guestlecture#когнитивныйкапитал
🇺🇿O‘zbekistonda islom moliyasi: taraqqiyot, istiqbol va imkoniyatlar
👥 “Mezon Kengashi” Islom moliya konsalting kompaniyasi direktori, O‘zbekiston Xalqaro Islom akademiyasi o‘qituvchisi, ✍🏻Sertifikatlangan shariat maslahatchisi va auditori (CSAA), AAOIFI (Manama, Bahrayn) - Muzaffar Xusniddinov tomonidan o‘tkazilgan mahorat darsidan video reportaj.
📑Mahorat darsi davomida bugungi kunda dolzarb bo‘lgan Islom moliyasining mezonlari ko‘rib chiqildi.
#GraduateSchool#GuestLecture#Finance#Training
Web-site | Telegram | Facebook | Instagram
O‘zbekistonda islom moliyasi: taraqqiyot, istiqbol va imkoniyatlar
🇺🇿UZB
___
Islamic Finance in Uzbekistan: development, prospects and opportunities
🇬🇧ENG
___
Исламские финансы в Узбекистане: развитие, перспективы и возможности
🇷🇺RU
#GraduateSchool#GuestLecture#Finance#Training
Web-site | Telegram | Facebook | Instagram
💭“Biznesda mahorat darslari” loyihasida O‘zbekistonda xotin-qizlar tadbirkorligini rivojlantirishga bag‘ishlangan navbatdagi mahorat darsi bo‘lib o‘tdi
🇺🇿UZB
___
The “Business Master Class” project recently held another master class focused on the development of women’s entrepreneurship in Uzbekistan
🇬🇧ENG
___
В рамках проекта «Бизнес мастер-класс» прошел очередной мастер-класс, посвященный развитию женского предпринимательства в Узбекистане
🇷🇺RU
#GraduateSchool#GuestLecture#Women#Entrepreneurship
Web-site | Telegram | Facebook | Instagram
👥The second meeting of the Guest Lecture project
Today, on the eve of International Women's Day (March 8), the Ambassador of the Kingdom of the Netherlands to Kazakhstan, Nico Schermers gave a lecture on the topic «The formation of a feminist foreign policy».
The Netherlands is one of the world leaders in gender equality. Equal representation of women in public and corporate governance institutions - is one of the main principles of Dutch politics. During the meeting, the Ambassador spoke about the Netherlands' experience in implementing a feminist foreign policy, as well as the country's political decisions and initiatives. The audience actively engaged in discussions and exchange of opinions.
We express our sincere gratitude to Mr. Ambassador for the lecture!
#KIPD#ҚҚДИ#GuestLecture#GenderEquality
👥Guest Lecture жобасының екінші кездесуі
Бүгінгі қонағымыз — Орта Азиядағы Нидерланд Корольдігінің елшісі Нико Схермерс. Ол 8 наурыз — Халықаралық әйелдер күні қарсаңында «Феминистік сыртқы саясатты қалыптастыру» тақырыбында дәріс оқыды.
Нидерланды – гендерлік теңдік көрсеткіші бойынша ең үлкен прогреске ие елдердің бірі. Әйелдердің мемлекеттік және корпоративтік басқару институттарындағы тең өкілдігі Нидерланды саясатындағы басты принциптердің бірі ретінде бекітілген. Осыған қатысты спикер Нидерланды Корольдігінің феминистік сыртқы саясатты қабылдауы және елдің өзге де саяси шешімдері мен бастамалары туралы мазмұнды ақпарат айтты. Қатысушылар да тақырыпты қызу талқылап, өзара пікір алмасты.
Дәріс үшін Елші мырзаға зор алғыс білдіреміз!
#KIPD#ҚҚДИ#GuestLecture#GenderEquality
“Biznesda mahorat darslari” loyihasida innovatsion iqtisodiyotni rivojlantirishda IT sohasining o‘rniga bag‘ishlangan uchrashuv bo‘lib o‘tdi
🇺🇿UZB
___
The first meeting of the "Business Master Class" project was held to discuss the role of IT in developing the innovation economy
🇬🇧ENG
___
В рамках проекта «Бизнес мастер-класс» состоялась встреча посвященная роли IT сферы в развитии инновационной экономики
🇷🇺RU
#GraduateSchool#GuestLecture#Business#Discuss
Web-site | Telegram | Facebook | Instagram
🇪🇸 Xalqaro biznes sohasida ekspert, ispaniyalik Romero de Marselo Adolfo tomonidan Oliy maktabning professor, o‘qituvchi va tinglovchilari uchun.
🇺🇿 “O‘zbekistonning kichik va o‘rta biznes kompaniyalari uchun Yevropa Ittifoqi bozoriga kirish va xalqaro biznes yuritish imkoniyatlari” mavzusida ma’ruzasidan video-reportaj.
#GraduateSchool#GuestLecture#SME#Internalization
Web-site | Telegram | Facebook | Instagram