Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#Sinfonía6#Dvořák#RafaelKubelin
Título:La “sinfonía Nº 6 En Re Mayor” Op.60, B 112
Autor:Antonín Dvořák
Movimiento IV:Finale: Allegro con spirito
Interpretación:
Filarmónica de Berlin
Director:
Rafael Kubelin
Fuente:🎼
@ClasicaAlAtardecer
#Sinfonía6#Dvořák#RafaelKubelin
Título:La “sinfonía Nº 6 En Re Mayor” Op.60, B 112
Autor:Antonín Dvořák
Movimiento I:Allegro non tanto
Interpretación:
Filarmónica de Berlin
Director:
Rafael Kubelin
Fuente:🎼
@ClasicaAlAtardecer
#Sinfonía6#Dvořák#RafaelKubelin
Título:La “sinfonía Nº 6 En Re Mayor” Op.60, B 112
Autor:Antonín Dvořák
Movimiento II:Adagio
Interpretación:
Filarmónica de Berlin
Director:
Rafael Kubelin
Fuente:🎼
@ClasicaAlAtardecer
#Sinfonía6#Dvořák#RafaelKubelin
Título:La “sinfonía Nº 6 En Re Mayor” Op.60, B 112
Autor:Antonín Dvořák
Movimiento III: Scherzo
Interpretación:
Filarmónica de Berlin
Director:
Rafael Kubelin
Fuente: 🎼
@ClasicaAlAtardecer
#Sinfonía6#Dvořák#RafaelKubelin
LA “SINFONÍA Nº 6 EN RE MAYOR” OP.60, B 112
Fue empezada el 27 de agosto de 1880 y terminada el 15 de octubre del mismo año. Se estrenó en Praga el 25 de marzo de 1881 por la Orquesta Filarmónica de Praga dirigida por Alfred Čech y se publicó como su primera sinfonía. En aquellos momento Dvořak quería que fuera realmente su primera sinfonía, rechazando las cinco anteriores. Esta obra tiene su origen en un encargo realizado por Hans Richter y la Filarmónica de Viena, pero por motivos políticos no pudieron estrenarla en Viena.
Consta de cuatro movimientos:
🎵Allegro non tanto
🎵 Adagio
🎵 Scherzo
🎵 Finale: Allegro con spirito
El primer movimiento allegro non tanto comienza presentando el tema principal. Empezando suavemente la música se va caldeando. El segundo tema surge de modo fluido en los violoncelos y trompas, con un solo de oboe. El desarrollo empieza de modo misterioso y es rico en contrastes. La recapitulación nos vuelve a presentar los temas variados, avanzando hasta el climax, repitiendo el tema principal. La música se atenúa hasta que la coda, también basada en el tema principal, termina con fuerza el movimiento. La música denota la influencia de Brahms.
El adagio tiene un calor romántico basado en su tema principal. Una introducción de cuatro compases, que se repetirá varias veces durante el movimiento, da paso al tema principal. Después de una intervención del clarinete contestado por la trompa, se recapitula el tema principal. La sección central se basa en los cuatro compases de la introducción. El oboe presenta una nueva variación sobre este motivo. La flauta repite de nuevo el tema principal que luego pasa a la orquesta. Una cadenza de la flauta solista antecede a un crescendo. Luego el tema principal aparece en los violonchelos. El motivo inicial cierra el movimiento.
El scherzo lleva el subtítulo de furiant. Se trata de una danza popular checa de carácter muy enérgico. El scherzo se repite antes de presentar el trio, más apacible y calmado, contrastando entre las dos furiosas partes del scherzo. Finalmente se repite de modo abreviado el scherzo, terminando con una rápida coda.
Termina con un allegro con spirito de nuevo con aires brahmsianos. El primer tema es alegre.
Después de una suave introducción se repite en el tutti. El segundo tema es también de carácter animado. Sigue con un elaborado desarrollo que nos lleva a un climax, después del cual se inicia la recapitulación variada. Los violines inician una stretta final a la que se incorporan todos los instrumentos interpretando el tema principal. La coda también está dominada por dicho tema.
Las obras de Dvořak eran conocidas en toda Europa. En el año 1884 viajó a Inglaterra para dirigir su Stabat Mater en el Royal Albert Hall el día 20 de marzo, obra que había sido estrenada en Londres el 10 de marzo de 1883 en el St. James Hall con un éxito tan grande que motivó su invitación al año siguiente. En el mes de septiembre de 1884 regresó a Inglaterra para participar en el Festival de Worcester donde dirigió con gran éxito su sexta sinfonía el 11 de septiembre.
@ClasicaAlAtardecer
#Sinfonía6#Dvořák#RafaelKubelin
Título:La “sinfonía Nº 6 En Re Mayor” Op.60, B 112
Autor:Antonín Dvořák
Movimiento IV:Finale: Allegro con spirito
Interpretación:
Filarmónica de Berlin
Director:
Rafael Kubelin
Fuente:🎼
@ClasicaAlAtardecer
#Sinfonía6#Dvořák#RafaelKubelin
Título:La “sinfonía Nº 6 En Re Mayor” Op.60, B 112
Autor:Antonín Dvořák
Movimiento III: Scherzo
Interpretación:
Filarmónica de Berlin
Director:
Rafael Kubelin
Fuente: 🎼
@ClasicaAlAtardecer
#Sinfonía6#Dvořák#RafaelKubelin
Título:La “sinfonía Nº 6 En Re Mayor” Op.60, B 112
Autor:Antonín Dvořák
Movimiento II:Adagio
Interpretación:
Filarmónica de Berlin
Director:
Rafael Kubelin
Fuente:🎼
@ClasicaAlAtardecer
#Sinfonía6#Dvořák#RafaelKubelin
Título:La “sinfonía Nº 6 En Re Mayor” Op.60, B 112
Autor:Antonín Dvořák
Movimiento I:Allegro non tanto
Interpretación:
Filarmónica de Berlin
Director:
Rafael Kubelin
Fuente:🎼
@ClasicaAlAtardecer
#Sinfonía6#Dvořák#RafaelKubelin
LA “SINFONÍA Nº 6 EN RE MAYOR” OP.60, B 112
Fue empezada el 27 de agosto de 1880 y terminada el 15 de octubre del mismo año. Se estrenó en Praga el 25 de marzo de 1881 por la Orquesta Filarmónica de Praga dirigida por Alfred Čech y se publicó como su primera sinfonía. En aquellos momento Dvořak quería que fuera realmente su primera sinfonía, rechazando las cinco anteriores. Esta obra tiene su origen en un encargo realizado por Hans Richter y la Filarmónica de Viena, pero por motivos políticos no pudieron estrenarla en Viena.
Consta de cuatro movimientos:
🎵Allegro non tanto
🎵 Adagio
🎵 Scherzo
🎵 Finale: Allegro con spirito
El primer movimiento allegro non tanto comienza presentando el tema principal. Empezando suavemente la música se va caldeando. El segundo tema surge de modo fluido en los violoncelos y trompas, con un solo de oboe. El desarrollo empieza de modo misterioso y es rico en contrastes. La recapitulación nos vuelve a presentar los temas variados, avanzando hasta el climax, repitiendo el tema principal. La música se atenúa hasta que la coda, también basada en el tema principal, termina con fuerza el movimiento. La música denota la influencia de Brahms.
El adagio tiene un calor romántico basado en su tema principal. Una introducción de cuatro compases, que se repetirá varias veces durante el movimiento, da paso al tema principal. Después de una intervención del clarinete contestado por la trompa, se recapitula el tema principal. La sección central se basa en los cuatro compases de la introducción. El oboe presenta una nueva variación sobre este motivo. La flauta repite de nuevo el tema principal que luego pasa a la orquesta. Una cadenza de la flauta solista antecede a un crescendo. Luego el tema principal aparece en los violonchelos. El motivo inicial cierra el movimiento.
El scherzo lleva el subtítulo de furiant. Se trata de una danza popular checa de carácter muy enérgico. El scherzo se repite antes de presentar el trio, más apacible y calmado, contrastando entre las dos furiosas partes del scherzo. Finalmente se repite de modo abreviado el scherzo, terminando con una rápida coda.
Termina con un allegro con spirito de nuevo con aires brahmsianos. El primer tema es alegre.
Después de una suave introducción se repite en el tutti. El segundo tema es también de carácter animado. Sigue con un elaborado desarrollo que nos lleva a un climax, después del cual se inicia la recapitulación variada. Los violines inician una stretta final a la que se incorporan todos los instrumentos interpretando el tema principal. La coda también está dominada por dicho tema.
Las obras de Dvořak eran conocidas en toda Europa. En el año 1884 viajó a Inglaterra para dirigir su Stabat Mater en el Royal Albert Hall el día 20 de marzo, obra que había sido estrenada en Londres el 10 de marzo de 1883 en el St. James Hall con un éxito tan grande que motivó su invitación al año siguiente. En el mes de septiembre de 1884 regresó a Inglaterra para participar en el Festival de Worcester donde dirigió con gran éxito su sexta sinfonía el 11 de septiembre.
@ClasicaAlAtardecer
#Sinfonía6#Patética#Tchaikovsky#GustavoDudamel
Título:Sinfonía No. 6 en Si menor, opus 74, "Patética"
Autor:Piotr Illich Tchaikovsky
Movimientos:
🎵 I. Adagio - Allegro non too
🎵 II. Allegro con grace (Re mayor
🎵 III. Allegro muy animado
🎵 IV. Final: Adagio lamentoso
Interpretación:
La Sinfónica Simón Bolívar
Director:
Gustavo Dudamel
Fuente:🎼
@ClasicaAlAtardecer
#Sinfonía6#Patética#Tchaikovsky#GustavoDudamel
LA SINFONÍA N° 6 EN SI MENOR OP. 74 (PATÉTICA)
La sinfonía consta de cuatro movimientos:
🎵I. Adagio - Allegro non too (menor - Si menor - Re mayor tonalidad ambigua - - Si mayor)
🎵 II. Allegro con grace (Re mayor - Si menor - Re mayor)
🎵 III. Allegro muy animado (Sol mayor - Mi mayor - Sol mayor)
🎵 IV. Final: Adagio lamentoso (Si menor - Re mayor - Si menor - tono ambiguo - Si menor)
El primer movimiento empieza con un adagio. Un lúgubre solo de fagot abre la obra. Un motivo nervioso dará lugar al primer tema del allegro ma non troppo. El segundo tema de la forma sonata es una sentida melodía presentada por la cuerda con apasionado lirismo. Un fuerte estallido de la orquesta inicia la sección de desarrollo. Durante el mismo los temas son llevados a la máxima expresividad. La coda termina con los vientos entonando una coral.
El segundo movimiento allegro con grazia está escrito en forma de lied A, B, A. El primer tema tiene forma de un elegante vals. La parte central contrasta con su forma intimista, utilizando notas melancólicas. Luego se reanuda el vals, terminando con una tranquila coda en la que aparecen dolorosos suspiros.
Parece que el amor ha triunfado y nos presenta a nuestro héroe bailando en un elegante e iluminado salón con el ser de sus sueños. En un intermedio del baile se confiesan íntimos sentimientos, expresándose su necesidad de amar. Se reanuda la danza pero a su final le asaltan las dudas, temiendo que su felicidad pueda terminar.
El tercer movimiento allegro molto vivace corresponde al scherzo. Está compuesto por un tema en forma de marcha. Culmina en un largo crescendo basado en el tema de la marcha que nos lleva a una serie de adornos. Luego se reanuda solemnemente la marcha llevándola a su climax. Una brillante coda cierra el movimiento.
Termina con el trágico andante lamentoso. El primer tema muestra su amargura en escalas descendentes. El segundo tema también expresa tristeza pero con un sentimiento de resignación. La llamada del destino lo va arrastrando hacia la muerte. En la coda final las notas van descendiendo, cada vez más abajo de un modo desolador, hasta terminar únicamente con las notas de los violoncelos y contrabajos.
Pero de repente todo ha cambiado. Nuestro héroe ha perdido lo más apreciado, el amor. El sentimiento de soledad le invade. Se siente destruido, sin fuerza para nada. Una visión consoladora se le presenta, pero se encuentra incapaz de salvarse. Sus lamentos son cada vez más intensos. Los recuerdos de su felicidad pasada lo llevan a la desesperación.
Esta sinfonía trata de una batalla entre una tenaz energía vital y una fuerza anulación más fuerte que termina en un aterrador agotamiento, pero lo que la hace tan poderosa es que trata de todos nosotros, no solo de Tchaikovsky. Y eso se debe al modo en que Tchaikovsky hace funcionar el drama musical y sinfónico de la obra.
@ClasicaAlAtardecer