Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Oʻzbekiston Respublikasi Prezidenti Shavkat Mirziyoyev va Qozogʻiston Respublikasi Prezidenti Qasim-Jomart Toqayev sunʼiy intellekt boʻyicha umummilliy xakatonga tashrif buyurdilar.
—
Президент Республики Узбекистан Шавкат Мирзиёев и Президент Республики Казахстан Касым-Жомарт Токаев посетили общенациональный хакатон по искусственному интеллекту.
#Mirziyoyev#tashrif#Qozogiston#xakaton
Prezident.uz|Facebook|Instagram|YouTube|X
Oʻzbekiston Respublikasi Prezidenti Shavkat Mirziyoyev va Qozogʻiston Respublikasi Prezidenti Qasim-Jomart Toqayev sunʼiy intellekt boʻyicha umummilliy xakatonga tashrif buyurdilar.
—
Президент Республики Узбекистан Шавкат Мирзиёев и Президент Республики Казахстан Касым-Жомарт Токаев посетили общенациональный хакатон по искусственному интеллекту.
#Mirziyoyev#tashrif#Qozogiston#xakaton
Prezident.uz|Facebook|Instagram|YouTube|X
Oʻzbekiston Respublikasi Prezidenti Shavkat Mirziyoyev va Qozogʻiston Respublikasi Prezidenti Qasim-Jomart Toqayev sunʼiy intellekt boʻyicha umummilliy xakatonga tashrif buyurdilar.
—
Президент Республики Узбекистан Шавкат Мирзиёев и Президент Республики Казахстан Касым-Жомарт Токаев посетили общенациональный хакатон по искусственному интеллекту.
#Mirziyoyev#tashrif#Qozogiston#xakaton
Prezident.uz|Facebook|Instagram|YouTube|X
Oʻzbekiston Respublikasi Prezidenti Shavkat Mirziyoyev va Qozogʻiston Respublikasi Prezidenti Qasim-Jomart Toqayev sunʼiy intellekt boʻyicha umummilliy xakatonga tashrif buyurdilar.
—
Президент Республики Узбекистан Шавкат Мирзиёев и Президент Республики Казахстан Касым-Жомарт Токаев посетили общенациональный хакатон по искусственному интеллекту.
#Mirziyoyev#tashrif#Qozogiston#xakaton
Prezident.uz|Facebook|Instagram|YouTube|X
“Yangi O‘zbekiston” universitetida “Open Data Challenge” xakatoni oʻtkazilmoqda
✅ Bugun “Yangi O‘zbekiston” universitetida Open Data Challenge xakatonining ilk kuni bo‘lib o‘tdi. Har yili an’anaviy tarzda o‘tkaziladigan ushbu yirik tadbirda mamlakatimizning turli hududlaridan tashrif buyurgan yosh dasturchilar qatnashmoqda.
⚡️ Tadbirning asosiy maqsadi – ishtirokchilarga ochiq ma’lumotlardan foydalangan holda turli sohalardagi muammolarni hal qilish uchun zamonaviy texnologiyalarni qo‘llashda yordam berishdir.
🚛 Birinchi kun davomida ishtirokchilar jamoalarga bo‘linib, o‘z g‘oyalari ustida ishlashni boshladilar. Mentorlar ishtirokchilarga yo‘l-yo‘riq ko‘rsatib, loyihalarni takomillashtirishda ko‘maklashishmoqda.
🎗 Ishtirokchilarning eng yaxshi loyihalari qimmatbaho mukofotlar bilan taqdirlanadi.
🔁English
➖➖➖➖➖➖➖➖➖➖➖➖
#xakaton#opendatachallenge
⬇️Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
Open Data Challenge - yurtimizdagi eng yirik xakatonlardan birida qatnashing
✅ “Yangi O‘zbekiston” universitetida 24-26-yanvar kunlari har yili o'tkazilib kelinayotgan Open Data Challenge xakatoni bo‘lib o‘tadi.
💫 Xakaton ishtirokchilari ochiq ma’lumotlardan foydalangan holda turli sohalardagi muammolarga o'zlarinig innovatsion yechimlarini yaratishadi.
⏩Xakaton yo‘nalishlari:
🔹 davlat sektori;
🔹 biznes;
🔹 korrupsiyaga qarshi kurash;
🔹 ijtimoiy soha.
💥 Xakatonda o'z ko‘nikmangizni oshirish, ajoyib loyihalar ustida jamoaviy ishlash va qimmatbaho mukofotlar sizni kutmoqda.
👥 Barcha xohlovchilar yakka tartibda yoki jamoaviy (3 kishigacha) ishtirok etishlari mumkin.
🎓 Xakatonga tayyorlov vebinar va mahorat darslari:
7-yanvar: korrupsiyaga qarshi kurash
9-yanvar: ijtimoiy soha
17-yanvar: ochiq ma’lumotlar bilan ishlash (oflayn mahorat darsi)
🗓Ro‘yxatdan o‘tish muddati: 20-yanvargacha, havola orqali ro‘yxatdan o‘ting.
🔁 English
➖➖➖➖➖➖➖➖➖➖➖➖
#xakaton#opendatachallenge
⬇️Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
Universitetimiz talabalari yaratgan dastur orqali huquqiy muammolarga yechim topishingiz mumkin
💥 “Yangi O‘zbekiston” universiteti talabalaridan iborat “Iustitia Uz” jamoasi “Open Data Challenge” xakatonida ishtirok etib, sovrindorlikni qo‘lga kiritdi.
👩💻 Talabalarimiz yaratgan chat bot sun'iy intellekt yordamida ishlaydi va qonunga oid savollaringizga O‘zbekiston Respublikasi huquqiy ma'lumotlariga asoslanib, javob beradi. Bu esa hech kim sizning huquqlaringizni buza olmasligini ta'minlaydi.
🎗 Talabalarimizni ushbu g‘alaba bilan tabriklaymiz va ishonamizki, kelajakda bundanda olamshumul loyihalarga asos solib, xalqimizga yengilliklar yaratishdan to‘xtashmaydi.
🔁English
➖➖➖➖➖➖➖➖➖➖➖➖➖
#xakaton#OpenDataChallenge
⬇️ Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
Eng faol akademik muhit va eng ko'p imkoniyatlar - har bir talabaning orzusi!
✅ “Yangi O‘zbekiston” universitetida yurtimizdagi eng katta tadbirlardan - “Open Data Challenge” xakatoni o‘tkazildi.
🔁English
➖➖➖➖➖➖➖➖➖➖➖➖➖
#xakaton#OpenDataChallenge
⬇️ Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
“Open Data Challenge” xakatoni o'tkazilmoqda
👩💻 Hozirda “Yangi Oʻzbekiston” universitetida ochiq maʼlumotlardan foydalangan holda davlat sektori, ijtimoiy sektor, biznes sektori va korrupsiyaga qarshi kurash yo'nalishlarida texnologik yechimlarni ishlab chiqish boʻyicha xakaton o'tkazilmoqda.
✅ Xakatonda 150 nafar ishtirokchi qatnashayotgan bo'lib, ular ikki kun davomida shakllantirgan loyihalarini bugun taqdim etishadi.
🎗Barcha ishtirokchilarga omad tilaymiz!
🔁English
➖➖➖➖➖➖➖➖➖➖➖➖➖
#xakaton#OpenDataChallenge
⬇️ Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
Yurtimizdagi eng katta xakatonlardan:“Open Data Challenge” xakatoni o'tkaziladi
✅ “Yangi Oʻzbekiston” universitetida joriy yilning 26-28-yanvar kunlari ochiq maʼlumotlardan foydalangan holda texnologik yechimlarni ishlab chiqish boʻyicha xakaton o'tkaziladi.
💻 Qatnashuvchilar texnologik yechimlarni quyidagi toifalardan birida taqdim etishlari kerak:
🔹davlat sektori,
🔹ijtimoiy sektor,
🔹biznes sektori,
🔹korrupsiyaga qarshi kurash.
👉Batafsil ma'lumotolish.
👉Ro'yxatdan o'tish.
📌Xakatonda barcha qiziquvchilar ishtirok etishlari mumkin.
🔁English
➖➖➖➖➖➖➖➖➖➖➖➖➖
#xakaton#OpenDataChallenge
⬇️ Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
Oʻzbekiston Respublikasi Prezidenti Shavkat Mirziyoyev va Qozogʻiston Respublikasi Prezidenti Qasim-Jomart Toqayev sunʼiy intellekt boʻyicha umummilliy xakatonga tashrif buyurdilar.
—
Президент Республики Узбекистан Шавкат Мирзиёев и Президент Республики Казахстан Касым-Жомарт Токаев посетили общенациональный хакатон по искусственному интеллекту.
#Mirziyoyev#tashrif#Qozogiston#xakaton
Prezident.uz|Facebook|Instagram|YouTube|X
Oʻzbekiston Respublikasi Prezidenti Shavkat Mirziyoyev va Qozogʻiston Respublikasi Prezidenti Qasim-Jomart Toqayev sunʼiy intellekt boʻyicha umummilliy xakatonga tashrif buyurdilar.
—
Президент Республики Узбекистан Шавкат Мирзиёев и Президент Республики Казахстан Касым-Жомарт Токаев посетили общенациональный хакатон по искусственному интеллекту.
#Mirziyoyev#tashrif#Qozogiston#xakaton
Prezident.uz|Facebook|Instagram|YouTube|X