Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#Dutch court sentences #Eritrea human trafficker to 20 years
A Dutch court on Tuesday sentenced an Eritrean man to 20 years in prison for operating a human trafficking ring in which migrants were tortured and their families extorted.
The court said the man, identified as Amanuel #Walid, had treated migrants "without any humanity" as they were transported from Eritrea to #Europe via #Libya.
"Your only aim was to earn as much money as possible from people who were looking for a better future," presiding judge Rene Melaard told Walid.
The court in the northern Dutch city of #Zwolle heard how gang members tortured victims while on the phone to their families in the Netherlands, demanding payments to make the abuse stop. Only once family members had transferred money were the victims put on rickety boats for the perilous trip across the Mediterranean Sea. Many drowned in the crossing.
https://www.facebook.com/AddisstandardEng/posts/pfbid0e9YqCpyLghyEouyA911hTeebioBPf4mTh4fVeBBchU9xr53T5qZURCXU8qW5ZQisl
Переводчики-редакторы со знанием иностранных языков
#удаленно#вакансия#crypto#tango
Katz Technologies LLC создаёт WEB3-экосистему (криптокошелёк, DEX, Memepad, Explorer) и ищем профессионального переводчика-редактора для проверки ИИ-переводов сайта и долгосрочного сотрудничества.
Не важны дипломы и громкие компании. Главное - чувство языка, ответственности и понимание crypto-контекста. Вы сразу видите искажения смысла, ошибки в терминах и роботизированный перевод, умеете быстро и точно доводить машинный текст до профессионального уровня. Важно чувствовать тон продукта, которому пользователь доверит деньги.
Мы предлагаем:
- Долгосрочный проект и сильный кейс в портфолио
- Удалённую работу и гибкий график
- Возможность влиять на продукт с нуля
- Бонусы за результат
Задачи:
- Проверка ИИ-перевода сайта (10+ страниц, ~5 000 знаков каждая)
- Контроль смысла и терминологии (Tier-1 приоритет)
- Исправление ошибок, кальки и неестественных формулировок
- Работа с готовым переводом (без переписывания с нуля)
Языки (один или несколько):
#German, #Swedish, #Polish, #Dutch, #French, #Turkish, #Spanish, #Portuguese
Обязательно:
- Уровень: C1+
- Умение быстро вносить точечные правки
Приветствуется:
Опыт в IT / crypto / fintech
Как откликнуться:
В ТГ: https://t.me/shillbert
Укажите язык(и), опыт и примеры проектов (если есть).
⏺Откликнуться: https://t.me/shillbert
➖➖➖➖➖➖➖➖➖➖➖
🪩 Откликнуться быстрее других
➖➖➖➖➖➖➖➖➖➖➖
🇮🇱🇳🇱#Dutch police confirm the #Israeli#football#hooligans started the violence in #Amsterdam
• Israeli hooligans march through the city centre shouting out racist chants, mocking the victims of Israeli #genocide in #Gaza
• Hooligans tear down #Palestine flags and burn them
• Hooligans ignore the minute of silence for the victims of #Valencia floods
• Hooligans attack Arab-looking Taxi driver
• Hooligans get attacked after the game. Taxi drivers join in.
• Western Media create usual (fake) "Isreali victim" myth and the usual fake "#antiSemitism" claims follow.
Jerusalem Post of Nov 5, states: "#Mossad agents among the Israeli hooligans" (also active-duty #IDF soldiers.)
https://archive.is/48eVN
The whole thing is #ZioNazi Theatre, created to put political pressure on the Dutch because
in June this year:
THE #NETHERLANDS STOPPED SUPPLYING #F35 SPARE-PARTS TO ISRAEL.
TWITTER FULLY EMBRACES "THE DARK SIDE"!
If you are a #Twitter/#X "Creator" your #UserData/ID will end up in the hands of #Mossad
#AU10TIX, the company that X/Twitter uses to verify its user's ID, is an Israeli company founded by members of Israeli intelligence units #ShinBet and #Unit8200.
The CEO, Ron #Atzmon, was a member of Israel's #CyberIntelligence unit 8200. His father was once the treasurer of the #Likud, #Netanyahu's party.
AU10TIX was founded in 2002 as the technology arm of a #Dutch firm called "#ICTSInternational".
ICTS international was established in 1982 ALSO by former members of Israeli intelligence unit Shin Bet.
This is an extreme security risk.
Not only will regular creators have to give their ID to a company with deep ties to Israeli intelligence, but PRO-#PALESTINIAN creators will also have to do the same.