Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
扎克伯格被控个人授权和鼓励公司侵犯版权
2026-05-07 14:35 by 约纳丹号历险记
五大出版商 Hachette、Macmillan、McGraw Hill、Elsevier 和 Cengage 以及作家 Scott Turow 起诉 Meta 公司及其 CEO 扎克伯格(Mark Zuckerberg),指控扎克伯格个人授权和积极鼓励大规模版权侵犯,使用盗版图书、期刊论文和网络抓取的资料训练 Meta 公司的 Llama AI 系统。Meta 否认有任何不当行为,表示将应诉,称法院已认定使用受版权保护的材料训练 AI 属于合理使用。用版权材料训练 AI 可能是合理使用,但 Meta 使用了非法手段获取了版权材料。起诉书称,为了赢得 AI 军备竞赛并构建一个功能完善的生成式 AI 模型,Meta 和扎克伯格遵循了其“快速行动打破常规”的信条,首先从盗版网站非法下载了数百万本受版权保护的书籍和期刊文章,未经授权抓取了几乎整个互联网的内容,构成了历史上最大规模的版权侵权之一。
https://variety.com/2026/digital/news/meta-ai-mark-zuckerberg-copyright-infringement-lawsuit-publishers-scott-turow-1236738383/
https://publishers.org/wp-content/uploads/2026/05/2026-05-05-Complaint.pdf
#Facebook
扎克伯格被控个人授权和鼓励公司侵犯版权
#Facebook
五大出版商 Hachette、Macmillan、McGraw Hill、Elsevier 和 Cengage 以及作家 Scott Turow 起诉 Meta 公司及其 CEO 扎克伯格(Mark Zuckerberg),指控扎克伯格个人授权和积极鼓励大规模版权侵犯,使用盗版图书、期刊论文和网络抓取的资料训练 Meta 公司的 Llama AI 系统。Meta 否认有任何不当行为,表示将应诉,称法院已认定使用受版权保护的材料训练 AI 属于合理使用。用版权材料训练 AI 可能是合理使用,但 Meta 使用了非法手段获取了版权材料。起诉书称,为了赢得 AI 军备竞赛并构建一个功能完善的生成式 AI 模型,Meta 和扎克伯格遵循了其“快速行动打破常规”的信条,首先从盗版网站非法下载了数百万本受版权保护的书籍和期刊文章,未经授权抓取了几乎整个互联网的内容,构成了历史上最大规模的版权侵权之一。
https://variety.com/2026/digital/news/meta-ai-mark-zuckerberg-copyright-infringement-lawsuit-publishers-scott-turow-1236738383/
https://publishers.org/wp-content/uploads/2026/05/2026-05-05-Complaint.pdf
👺Internet trolls may have won the battle, but they didn't win the war!
According to Socialbakers, the majority of industries on #Facebook are getting more positive comments on posts than they are negative!
🚀@PerspectiveIX
📉Facebook Employees are NOT as Happy with Mark Zuckerberg as They Used to Be
#Facebook employees have long been known for their fierce loyalty to the company and its founder Mark Zuckerberg. In the aftermath of numerous privacy debacles, including ones in which Facebook has exposed users’ personal information and facilitated attempts to undermine American democracy, that enthusiasm seems to have flagged.
The Facebook CEO saw his ranking among top US CEOs plummet this year, from No. 16 in 2018 to No. 55 this year, though he does have an approval rating of 94 percent, according to new data from Glassdoor, a site where employees can anonymously rate their jobs and their CEOs. His approval rating was 96 percent last year.
🔗 Read more on Recode.
🚀@PerspectiveIX
📡The (next or already) big thing.
👥Facebook Post Engagements
According to Socialbakers, these are the top engaging post types on #Facebook:
1. Live video 🔴
2. Photo 📸
3. Video 📹
4. Link 🔗
🚀@PerspectiveIX via Socialbakers.
📉Brand Reputations That Took a Hit in 2019
#Facebook certainly had a tough year and it shows in the recent Axios and Harris Poll report: The 100 Most Visible Companies. The company had the largest dip in the report’s ranking, plummeting 43 places between 2018 and 2019. Barely in the top 100 brands, the social network fell to the bottom of the pack. Facebook has had to answer to legislators around the world this year about how it shares users’ data with third parties, the role it plays in spreading disinformation, and the vulnerabilities it has to hacks.
Read more on Statista | Download the Report (PDF).
🚀@PerspectiveIX