Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🌐Xalqaro moliya korporatsiyasi (IFC) mintaqaviy vakillari bilan uchrashuv
🇺🇿 Biznes va tadbirkorlik oliy maktabida IFC vakillari bilan uchrashuv bo‘lib o‘tdi. Uchrashuv davomida tomonlar biznes-ta’lim sohasidagi hamkorlik istiqbollari, barqaror rivojlanish tamoyillarini ilgari surish, ESG standartlarini joriy etish, xalqaro tavsiyalar va ilg‘or jahon tajribasiga asoslangan korporativ boshqaruvni takomillashtirish masalalarini muhokama qildilar.
🟢 IFCning ta’lim tashabbuslari kompaniya rahbarlari uchun boshqaruv va yetakchilik ko‘nikmalarini rivojlantirish hamda xususiy sektor ehtiyojlariga mos o‘quv dasturlarini ishlab chiqishga alohida e’tibor qaratadi.
💠 Yakunida tomonlar qo‘shma ta’lim dasturlarini ishlab chiqish va ESG tamoyillarini O‘zbekiston biznes muhitiga integratsiya qilishni qo‘llab-quvvatlash maqsadida keyingi chora-tadbirlarni muvofiqlashtirish bo‘yicha kelishuvga erishdilar.
📝Batafsil
🇷🇺RU
🇬🇧ENG
#GSBE#GraduateSchool#IFC#ESG#Cooperation#Meeting
🔝Web-site |🔝Facebook | 🔝Instagram | 🔝Youtube
17 мая в отеле Courtyard by Marriott Tashkent состоялся интерактивный тренинг по привлечению инвестиций и обслуживанию новых и действующих инвесторов со стороны международного эксперта Роберта Хайзака. Тренинг проводился в рамках проекта IFC, поддерживаемого правительством Японии. В мероприятии приняли участие сотрудники Агентства стратегического развития при Президенте Республики Узбекистан, Министерства инвестиций и внешней торговли и Агентства по привлечению иностранных инвестиций при МИВТ РУз. В ходе мероприятия обсуждались способы привлечения инвесторов, формирование совместных предприятий, принципы работы CRM-системы, а также меры по решению возникающих вопросов. В конце тренинга участники получили ответы на интересующие их вопросы.
#ifc#training#ipa#uzipa
Международный клуб дружбы Ленинградской области открыл для себя историю железнодорожного транспорта! 🚂
Участники МКД47 посетили Музей РЖД в Санкт-Петербурге, где познакомились с богатой историей железных дорог России. Гости смогли увидеть уникальные экспонаты, узнать о развитии железнодорожного транспорта и его важной роли в становлении нашей страны.
В ходе экскурсии иностранные участники клуба из разных стран получили возможность погрузиться в атмосферу прошлого и настоящего российского железнодорожного транспорта. Особенно впечатляющими стали старинные паровозы, исторические вагоны и современные локомотивы.
In English in the comments
#ВФМ#МКД#МеждународныйКлубДружбы#МКД47#WYF#IFC#InternationalFriendshipClub#IFC47
🔔 PikTools Генплан: Ваш DWG → 3D-модель + IFC по стандартам Москвы
Мы сделали генплан не просто чертежом, а полноценным цифровым двойником, который понимают все — от архитекторов до сетевиков. И да, он уже соответствует требованиям Москомархитектуры.
Технология работы:
✅ Из обычного DWG — в 3D-генплан и IFC
▪️Автоматическое построение объёмной модели прямо в Civil 3D
▪️Экспорт в формат IFC строго по структуре ЦИМ АГР, утверждённой для города Москва.
✅ Смежники скажут спасибо
Ваша модель становится основой для:
▪️Проверок коллизий АР-ГП (архитектура vs генплан)
▪️Проверок коллизий ГП-НС (генплан vs наружные сети)
▪️Выдаётся как задание смежным проектным командам с понятным объёмным представлением классического генплана.
✅ Что это даёт на практике?
▪️Архитекторы видят реальные отметки и привязки зданий.
▪️Сетевики сразу определяют зоны прокладки коммуникаций.
▪️Все работают с единой цифровой моделью, а не с клочками чертежей.
Хотите, чтобы ваш генплан стал центром BIM-координации?
🌐Запросите триал версию продукта PikTools Генплан демонстрацию на сайте
👍Подписывайтесь на наш новый канал по продукту
❤️Ставьте лайки и комментарии к видео справке продукта
🎞Смотреть как продукт делает 3D генплан и IFC
#PikTools#Генплан#BIM#ЦИМ#Москва#IFC#3Dмоделирование#Коллизии#АР_ГП#ГП_НС#Автоматизация#Civil3D#BIMteam
#cplusplus#3mf#android#asset_pipeline#assets#assimp#c_plus_plus#collada#dae#fbx#fbx_exporter#game_development#gamedev_tool#gamedevelopment#gltf#gltf2#ifc#patreon#python#stl
The Open Asset Import Library (Assimp) is a tool that helps load many different 3D file formats into a common format. It supports over 40 formats for importing and several for exporting. Assimp works on various platforms like Windows, macOS, Linux, Android, and iOS. It also provides tools to improve the 3D models, such as fixing errors and making them look better. This library is useful for developers because it simplifies working with different 3D file types, making it easier to create and manage 3D content across different systems.
https://github.com/assimp/assimp