Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🚀Mozo hits 450K followers! 🎉
A massive thank you to our amazing community for your support! We’re just getting started—stay tuned for more exciting updates, events, and rewards.
Let’s keep growing together! #Mozo
Website|Twitter|Community|Telegram Mini App|News Channel
Have you noticed that #Mozo is trending? 😜
We’re thrilled to see our community growing and embracing the future of decentralized AI!
Website|Twitter|Community|Telegram Mini App|News Channel
Data is more than just numbers—it's a reflection of who we are. The idea that corporations and governments can own or control our data threatens our personal freedom.
It’s time to reclaim your data and take back control. #Mozo
Website|Twitter|Community|Telegram Mini App|News Channel
GM #Mozo Builders🌞
Something exciting is just around the corner. Stay tuned for what’s coming next! 👀
Website|Twitter|Community|Telegram Mini App|News Channel
🚀 Exciting news!
#Mozo is partnering with CocosStudio, the premier platform powered by the world’s No.1 mini-game engine, Cocos Engine!
With a global community of over 1.6 million developers across 203 regions, Cocos Studio leads in mini-game development, incubation, and acceleration.
Together, we’re bridging the gap between Web2 and Web3, empowering developers to seamlessly transition to the decentralized world.
Website|Twitter|Community|Telegram Mini App|News Channel
We’re excited to announce our partnership with koi_protocol, a groundbreaking platform backed by Binance Labs
K.O.I combines the joy of virtual pet care with sophisticated AI competitive elements, all anchored on the Ethereum blockchain. This immersive environment caters to both casual and competitive gamers, enabling them to nurture, train, and trade their virtual companions.
Together, #Mozo and K.O.I will leverage advanced AI to enhance user experiences and drive innovation in the virtual pet gaming space.
Website|Twitter|Community|Telegram Mini App|News Channel
How to drive mass adoption of Web3? Lower the entry barriers for users! It's that simple.
👑 Pepe King is coming! Join #Mozo now and use your Telegram to earn free points. Don’t miss out!
🎮Play Now: https://t.me/mozoai_bot/hub
Website|Twitter|Community|Telegram Mini App|News Channel
1/6 The limitations of centralized control highlight the critical need for decentralized data in LLM development and RAG services. Let's explore why decentralized data is the future.
2/6 Enhanced Data Quality: Decentralization fosters a more inclusive environment where diverse user communities contribute data and perspectives. This enriches the knowledge base for LLMs, improving their performance and accuracy.
3/6 Reduced Biases: By removing centralized control of data sources, we significantly reduce potential biases. This promotes the development of fairer and more ethical AI models that benefit all users.
4/6 Increased Innovation: Decentralization fosters an environment where new ideas and contributions from the broader community can flourish, accelerating innovation in AI and leading to more advanced and powerful LLM models.
5/6 By harnessing the power of decentralized data, #Mozo proposes a novel solution that empowers regular users to actively contribute to the future of AI. This not only unlocks the full potential of LLMs but also fosters a more inclusive and ethically responsible AI development landscape.
6/6 Join us in revolutionizing AI development. Embrace decentralization and help create a more accurate, fair, and innovative future.
Website|Twitter|Community|Telegram Mini App|News Channel
🔥 Exciting news! #Mozo
🌟 New features are now live on the Mozo platform! 🌟
✅Our team is committed to continuous innovation to bring you a better experience.
❤️Explore these new features today and enjoy more efficient and smarter services!
Why #Mozo Matters:
✅Decentralized intelligence, empowering everyone.
✅Collaboration that enhances collective strength.
✅Innovation that revolutionizes industries and lives.
Be a part of Mozo’s journey!
Website|Twitter|Community|Telegram Mini App|News Channel