Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Mission!! (Кива Ириэ)
Возвращаясь к новым интересным сериям манги, которые я читаю. Раз уж я недавно получила водительские права спустя год обучения (специально брала максимальные часы практики, так как я была ноль и учить меня больше некому), расскажу про актуальное.
«Mission!!» – манга Кивы Ириэ, дзёсэй-мангаки, в Японии известной своими историями о взрослых женщинах и о том, что же там после пенсии и в почтенном возрасте. Собственно, это причина, по которой за пределами Японии мангака уже известна не так хорошо и переводов ее манги (любительских и официальных) практически и нет.
Мити 54 года. На первый взгляд все в ее жизни хорошо. Как среднестатистическая женщина в глазах общества она «состоялась»: у нее сын-студент, любящий муж и бизнес – книжный магазинчик, доставшийся ей от родителей. Но, конечно, это лишь фасад. У Мити почти нет времени на себя. С утра до вечера она занята работой магазина, домом и уходом за старенькой мамой, которая то и дело устраивает ссоры и ведет себя как ребенок. Жизнь проходит в постоянном напряжении. Сын не помогает с хозяйством и почти с ней не разговаривает, а муж вроде как нашел себе другую женщину на стороне, но это не точно. И вот так, вроде окруженная семьей, Мити чувствует себя устало и одиноко. Она постоянно воюет со старушкой-мамой, которая отказывается идти к врачу. Вспоминает о том, как ее семья избаловала мужа еще в молодости, позволяя ему не особо напрягаться домашними делами и работой. А еще как она решила взяться за семейный книжный магазин после смерти папы.
Но однажды в магазинчик Мити приходит экстравагантная клиентка – высокая женщина в очень броской одежде, причем примерно возраста героини. Мити замечает на улице машину женщины – элегантную и красивую. Ее настолько впечатляет эта дама за рулем и то, как она выглядела, что Мити начинает думать о том, что хотела бы открыть для себя что-то новое в жизни. Почему бы не научиться водить машину? Это помогло бы ей в работе с развозкой заказов из магазина. Да и ощущение, что с машиной она будто бы станет свободнее, ее радует. И вот, собравшись духом, героиня сообщает домочадцам о своем намерении учиться в автошколе.
А дальше начинается тяжелая учеба, во время которой Мити еще будет сомневаться в выборе, пугаться инструкторов (оказывается, в Японии тебе дают возможность ездить с самыми разными каждое занятие), столкнется с предвзятым мнением о своих способностях, а в итоге встретит в автошколе ту самую прекрасную даму! Которая, по иронии судьбы, сама работает в автошколе инструктором…
Очень жизненная и интересная манга. Не припомню больше таких детальных работ об обучении вождению взрослой женщины. И читая мангу думаешь невольно: да! Похожее во время учебы было и у меня! Жаль, только работа пока без перевода и доступна только на японском. Буду с удовольствием дальше читать ^^
#2020е@shoujo_josei
Чудесные обложки манги hara "Okashi no ie no madam-san" ("Мадам из домика сладостей") о дружбе харизматичной женщины в возрасте, торгующей сладостями, и полной закомплексованной девушки.
☂️ Как-то писала об этой манге здесь.
#2020е@shoujo_josei
Копаюсь в новеньком для себя. Находки на познакомиться поближе.
Фукамати Аои - новая многообещающая звездочка седзе-манги. Рисует для "Lala", а прославилась своими ваншотами. Мангака родилась в 1999, обожает Достоевского и "Братьев Карамазовых".
🌟 Один из известных ваншотов - "Yane no ue no haitatsunin" (Курьер на крыше). Увы, пока без какого-либо перевода.
19-й век, Лондон. Героиня Лиз работает курьером на знатный дом и доставляет письма так, будто это спецзадания. Прыгает по крышам, превращая доставку писем в экшн. Однажды Лиз невольно втягивает в неприятности студента Джесса. Тот начинает учить её читать, и Лиз впервые в жизни чувствует тягу к обретению знаний. Но тут выясняется неприятное обстоятельство: умение читать мешает её работе, потому что профессия девушки связана с секретными письмами, понимать которые "опасно" для жизни.
🌟"Nazotoki gakusha to hinekure tenshi" (Академия загадок и вредный ангел) - одна из последних работ мангаки, где тоже видна некоторая тяга к европейскому сеттингу, пусть на этот раз персонажи и японцы.
В частной школе, построенной на базе готического особняка начала XX века, новенькая ученица Юдзуки в первый же день учебы теряется в лабиринтах учебного заведения и встречает "ангела" из школьных слухов — главного местного красавчика. Но бисенэн, как оказалось, не особо соответствует тому, что о нем навоображали девочки. Он грубоватый и ленивый, да и вообще, как выяснилось, остался в академии на второй год. Зато он обладает наблюдательностью и хорошей логикой, что помогает в детективных расследованиях Юдзуки, которой в школе нужно найти кое-что важное...
#2020е@shoujo_josei#Lala@shoujo_josei
Думаю, многие слышали про замечательную мангу "Toripan"("Птичий хлеб") о наблюдении за птицами (и не только). Если ещё не слышали, то от души советую почитать - фанаты переводят ее на русский.
Я относительно недавно тоже увлеклась птицами, поэтому манга о них меня очень интересует. Набрела на "Mainichi tori biyori" от Тобиты Хадзимэ. Выходит манга в онлайн-дзесэй журнале "Comic polaris" и ее пока что можно там читать бесплатно (на японском): https://comic-polaris.jp/toribiyori/
Каждая глава - короткая манга о наблюдении мангаки за той или иной птицей. Сопровождается небольшими энциклопедическими заметками. Очень интересно. В общем, советую всем поклонникам добуцу-манги и эссе-манги. Красота.
#2020е#Polaris
Новость-молния, которая точно войдет в историю седзе.
Впервые за22 года журнал "Ribon" смог обойти по продажам своего "соперника" - "Ciao", который все это время занимал первое место по тиражу и продажам.
То, что "Рибон" вырвался вперед, японские исследователи заметили еще летом, но теперь вот все вполне официально. На обложке свежего номера за январь значится, что "Рибон - седзе-журнал номер 1!".
Припоминаю то время, когда "Рибон" считался "библией 2,5 миллиона девочек" в конце 1980-х. Сейчас, конечно, охват не такой, но все равно приятно. Интересно, связано ли увеличение продаж и тиражей с тем, что спустя много лет снова выходят аниме-экранизации манги из журнала? Сейчас идет экранизация "Acro trip", очень хорошая. Ждем январь и выход аниме по самой популярной манге современного "Рибон" - "Honey lemon soda". Сегодня как раз в сети новая иллюстрация к грядущей экранизации появилась.
#Ribon#2020е#журналы@shoujo_josei