Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Компания Li Auto представила StreamingClaw, унифицированную платформу для создания агентов на основе воплощенного искусственного интеллекта
🚗 Компания Li Auto представила StreamingClaw, унифицированную платформу для работы с агентами, предназначенную для анализа видео в реальном времени и воплощения искусственного интеллекта.
✅ Полностью совместимая с фреймворком OpenClaw, система StreamingClaw изначально поддерживает многомодальную потоковую передачу в реальном времени. Вместо обработки видео в виде файлов для автономного просмотра, система непрерывно получает визуальные данные в реальном времени и выполняет мгновенный анализ — что ближе к человеческому восприятию.
✅ В демонстрационных версиях система отслеживает поведение водителя, например, зевание или использование телефона, и выдает предупреждения, а также позволяет осуществлять проактивное взаимодействие, например, приветствовать пользователей, когда они приближаются к автомобилю.
Источник: Pandaily
@chinastocksnet
Если полезно, поставьте лайк 👍😇
#LI
📞 Навигация по каналам
▪️Акции▪️Облигации
▪️Китай ▪️Трейдинг
▪️Новости▪️Клуб
Короткие продавцы набросились на акции Li Auto, так как аналитики прогнозируют плохие результаты
📌 Медвежьи ставки на акции Li Auto Inc. взлетели до рекордной отметки в преддверии результатов третьего квартала, в котором, по прогнозам, китайский производитель электромобилей зафиксирует самое большое падение выручки с момента листинга.
📈 По данным S&P Global, в пятницу короткие продажи акций компании в свободном обращении достигли исторического максимума в 8,1%. Согласно оценкам аналитиков, составленным Bloomberg, выручка Li Auto, по оценкам аналитиков, завершившимся в сентябре, снизилась на 38% в годовом исчислении. Это падение может стать самым сильным с момента листинга компании в США в 2020 году, который состоялся за год до листинга в Гонконге.
➡️ Акции Li Auto, некогда любимые инвесторами, потеряли динамику из -за жёсткой конкуренции на рынке электромобилей с увеличенным запасом хода со стороны местных аналогов в Китае, крупнейшем автомобильном рынке мира. Снизившись примерно на 23% в этом году, акции компании занимают второе место по динамике роста в индексе Hang Seng China Enterprises, который вырос почти на 26%. Li Auto потеряла более половины своей стоимости с пикового значения в августе 2023 года.
*️⃣ Результаты будут опубликованы позднее в среду. Согласно отчётности, Li Auto поставила 93 211 автомобилей в третьем квартале, что на 39% меньше, чем в прошлом году.
«Медвежьи опасения в основном касаются их основного бизнеса EREV», — сказал Юджин Сяо, руководитель стратегии акций Китая в Macquarie Capital Ltd. «Следующий год, похоже, останется очень конкурентным, поскольку такие игроки, как Xpeng, ведут себя агрессивно с четырьмя моделями EREV, а Xiaomi запускает свой долгожданный внедорожник EREV».
Источник: Bloomberg
@chinastocksnet
Если полезно, поставьте лайк 👍😇
#LI