Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#freelance
Всем привет!
Ищу специалиста для реализации проекта
Задача:
Имеется DWH на PosgreSQL.
Необходимо построить OLAP кубы. В сумме около 20 измерений.
ТЗ в виде готовых excel, которые напрямую вытягивают данные из БД.
Требование:
Опыт разработки OLAP с нуля;
Знание SSAS MD, MDX, DAX;
По оплате готов услышать ваши предложения.
Подробности в лс -@zxcv9009
Много новых людей пришло, расскажу ещё историю из бытия фрилансером.
Делали мы как-то с другом проект для одной большой конторы (в своей области самой крупной в городе, миллиардные обороты). И вот там на старте нужно было подписаться в техзадании. А техзадание это такая увесистая папка страниц на сто. И подписаться мне, как руководителю проекта, нужно было на каждой странице.
Когда проект запустился, ядро мы собрали быстро. Полный план был что-то типа полгода, но в конечном итоге заняло полтора, потому что после сборки ядра мы практически непрерывно занимались правками и замечаниями. Каждый месяц мы приезжали к заказчику и показывали, что сделали. А нам составляли список из 10-20 новых пунктов. За доработки доплачивали, но в какой то момент стало понятно, что мы в некотором смысле работаем на аутсорсе, хотя подписывались на один конкретный проект. А оставались мы работать, потому что проект не был введён в эксплуатацию, и бросать его без запуска не хотелось.
Заказчик в итоге не переставал заваливать правками, шли месяцы. Впоследствии директор компании сменился, новому проект был без надобности, он заплатил нам остаток, который должен был, и проект остался навечно похоронен.
Как так вышло: огромное и очень подробное техзадание, но всё равно непрерывные правки и замечания? Я позже рефлексировал этот момент и пришёл к таким выводам:
1. Заказчик описал в техзадании конечную систему, которую хотел бы видеть. Нам была нарисована практически каждая кнопка будущей софтины: очень детально и подробно. При этом результат, который требовался заказчику, был описан только в общих чертах (ещё и менялся по ходу дела). ТРИЗ учит нас обращать внимание на результат, а не на способ его достижения.
2. Заказчик не был готов ничего менять со своей стороны. Представьте, я прихожу в спортзал к тренеру и говорю, что вот вам деньги, а я хочу мускулистое тело. Мне тренер предлагает программу занятий. Но я заявляю, что нет, мне некогда, у меня нет времени и возможности ходить. Вообще для меня слишком дорого будет перестроить процессы в своей жизни. Так что нет, никаких походов на занятия. Я же плачу деньги, в конце-концов. Давайте, заплачу ещё больше, если требуется. Дам тренеру больше времени. Так же и тут: в компании были не готовы перестраивать процессы, обновлять софт и железо, обучать персонал. Поэтому новую систему пытались интегрировать со старой, а в интерфейсе использовать не лучшие решения, а привычные.
#dev#freelance
#freelance#ML#вакансия
ML инженер
О проекте
RedCat․ai — технологическая B2B-платформа для подбора недвижимости. Мы создаём ИИ-ассистента для риэлторов, который помогает автоматизировать процессы поиска и консультирования клиентов. Наш подход основан на мультиагентной архитектуре и современных методах работы с LLM.
Что предстоит делать
• Разрабатывать новых агентов в мультиагентной системе ассистента
• Проектировать и улучшать пайплайны на базе LLM
• Работать с RAG: улучшение поиска, оптимизация ответов
• Подключать источники данных и строить интеграции в систему агентов
• Вносить улучшения и правки в существующие модули ассистента
Мы ожидаем от вас
• Опыт коммерческих проектов с ML/LLM, желательно завершённых и внедрённых
• Глубокое понимание RAG-архитектур (FAISS/ElasticSearch + LLM)
• Навыки разработки и оркестрации мультиагентных систем или аналогичных пайплайнов
• Уверенное владение Python и современными ML-фреймворками (LangChain, HuggingFace, PyTorch или аналоги)
• Понимание принципов построения AI-сервисов для реальных пользователей
Формат работы
• Фриланс, частичная занятость
• Работа напрямую с продуктовой командой RedCat․ai
Будет плюсом
• Опыт в диалоговых системах, виртуальных ассистентах, чат-ботах
• Знание тонкостей работы с большим количеством внешних источников (API, базы знаний)
Что предлагаем
• Работа над реальным продуктом в сфере PropTech и AI
• Гибкий формат: фриланс, задачи по мере готовности команды
Откликнуться @julb57
#freelance#frontend
⚙️HTML va ⚙️ CSS’ni yaxshi bilsangiz ham daromad topishingiz mumkin!
👉 Oddiygina shablonlar tayyorlab, ularni maxsus marketplace’larda sotishingiz mumkin. Bunday platformalarda sizning ishlanmangiz dizaynerlar va dasturchilar tomonidan xarid qilinadi.
Eng mashhur bozorlar:
◾️ThemeForest – eng yirik va tajribali sotuvchilar uchun maydon
◾️TemplateMonster – yangi boshlovchilar uchun qulay variant
◾️Creative Market – minimalistik va estetik dizaynlar uchun mos joy
💡 Agar shabloningiz sotilmasa ham, siz o‘zingizga eng katta boylikni topasiz — amaliy tajriba va ko‘nikma.
❓Siz hozirgacha tayyorlagan ishlanmangizni sotishga uringanmisiz?
💻@dasturlash_hayoti— Dasturchilar hayotidan foydali maslahatlar
How BLC Market will grow
We do not use traditional advertising as the main channel.
Growth will be built through users.
Each participant will be able to:
— invite others
— build their own network
— participate in the development of the community
Details coming soon.
#freelance#community
FAQ | BUY
The early core of BLC Market users is now being formed.
These people will:
— be the first to see the working version
— gain access to testing
— be able to influence the product's development
Later, an open growth model through invitations will be implemented.
For now, only those who are already inside can get access.
#freelance#community
FAQ | BUY