Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Codex Chronicle research preview
https://x.com/thsottiaux/status/2046291546325369065
Codex 今天更新了预览研究记忆功能,直接利用屏幕的上下文来改善和增强记忆,结合 Computer Use 插件 Combo,真正能够随时如意地看到和操纵你的电脑,加速自动化。
设置的个性化中开启。目前早起测试消耗大,不过今天也重置了 quota。现在面向 PRO 及 Mac 用户开放。
Context 重要性毋庸置疑,是所有所见所得。这个操纵最开始使用 AI 语音软件 VoiceInk 的时候貌似也有屏幕上下文的概念。
#codex
⚡️Скоро новости будут выглядеть так:
— Сегодня вышло 3 SOTA-модели
— Пока вы читали этот твит, они уже устарели
OpenAI выпустили GPT-5.3-Codex
Модель лучше справляется со сложными задачами разработки и может долго вести большие проекты без потери контекста.
Это полноценный агент, который может планировать шаги, работать с инструментами и действовать в реальном рабочем окружении.
Работает быстрее предыдущей версии и при этом сильнее в рассуждениях.
Подходит не только для кода, но и для анализа, исследований, документации и продуктовых задач вокруг разработки.
OpenAI фактически использовали Codex,чтобы создавать сам Codex - модель участвовала в собственном цикле разработки.
https://openai.com/index/introducing-gpt-5-3-codex/
@ai_machinelearning_big_data
#openai#codex
✴️OpenAI снова перевыпустили Codex, теперь как нативное приложение под Мак
Здесь можно вести несколько задач параллельно, изолируя изменения каждого агента через worktrees, собирать «навыки» из ваших инструментов и правил, а также запускать автоматизации по расписанию — всё в одном месте.
Из коробки доступны ключевые сценарии:
• Многозадачность без конфликтов. Работайте с несколькими агентами параллельно, а изменения держите изолированно с помощью worktrees.
• Навыки (Skills) как переиспользуемые блоки.Пакуйте инструменты и договорённости в готовые способности и подключайте их в проекты за минуты.
• Фоновые автоматизации.Делегируйте рутину: настраивайте запланированные воркфлоу, которые крутятся в фоне без вашего участия.
Доступность и лимиты: Codex уже доступен на macOS; Windows — скоро. На ограниченное время Codex входит в ChatGPT Free и Go, а для Plus/Pro/Business/Enterprise/Eduудвоены лимиты — в приложении, CLI, IDE-расширении и в облаке.
🤑ForgetMe | Boosty
Приобрести подписку на любые сервисы
⏩@forgetshop_bot
#нейросети#новости#chatgpt#codex
™️Codex 0.40.0: GPT-5-Codex по умолчанию и умнее работа с контекстом
Перевод с англ. Обновление Codex 0.40.0 сосредоточено на стабильности и удобстве девелоперов: модель GPT-5-Codex теперь по умолчанию, контекст автоматически «компактится» при больших объёмах, лимиты прозрачно видны, а код-ревью стало гибче.
Что изменилось:
🟡Default-модель: теперь GPT-5-Codex.
🟡Авто-compaction: для GPT-5-Codex срабатывает при 220k токенов.
🟡/status: показывает usage limits.
🟡Новые /review: ревью конкретного коммита, против базовой ветки или по кастом-инструкциям.
🟡MCP таймаут:60 c по умолчанию; настраивается в config.toml через tool_timeout_sec для каждого MCP-сервера.
Подробнее в релизе:GitHub — Codex v0.40.0
🤑ForgetMe | Boosty
Приобрести подписку на любые сервисы
⏩@forgetshop_bot
#нейросети#новости#chatgpt#codex