Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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ía8#Inconclusa#Schubert#MichailJurowski
Título:Sinfonía No. 8 en Si Menor, D. 759 "Inconclusa"
Autor:Franz Schubert
Movimientos:
🎵 00:43 I. Allegro Moderato
🎵 15:31 II. Andante con moto
Interpretación:
Sinfónica de Galicia
Director:
Michail Jurowski
Fuente:🎼
@ClasicaAlAtardecer
#Sinfonía8#Inconclusa#Schubert#MichailJurowski
SINFONÍA N° 8 EN SI MENOR, D. 759 (INCONCLUSA)
La elección de la tonalidad de Si menor, más sombría que la Si bemol, es un signo indicativo del esfuerzo realizado para lograr un efecto más intenso.
🎵I. Allegro Moderato
El primer movimiento da comienzo con el famoso tema que más tarde, habrá de dominar en el desarrollo. La segunda parte de este motivo inicial, es ejecutada por el clarinete y por el oboe superponiéndose a los violines; luego es interrumpida por algunos acordes: cuatro apacibles compases de los cornos y fagots llevan el segundo tema a los cellos; éste se presenta precedido por su acompañamiento de acordes sincopados. Sobreviene un compás de silencio y el segundo tema aparece por un corto período tras el cual llega a su frase final; un fortissimo Sí, sostenido por los metales y las cuerdas en pizzicato, conduce al fin de la exposición. El desarrollo propiamente dicho, está basado, casi exclusivamente en el primer tema de la Sinfonía. El acompañamiento sincopado del segundo tema vuelve a presentarse, más bien patéticamente, sin su melodía, y la segunda parte del primer tema se desliza sobre los clarinetes y los fagots, justamente antes de iniciar la recapitulación. Esta comienza directamente con la segunda parte del primer motivo (Schubert reserva la primera parte para el final). La recapitulación sigue las normas establecidas para el caso, aunque con un segundo tema en Re mayor. La sección de cierre dramático, sin embargo, termina en Si mayor y conduce a una coda en la tónica menor B. Esto recuerda el tema de apertura para el otro, final, reelaboración dramática de allanar el camino para que los acordes finales enfáticos.
🎵II. Andante con moto
El segundo movimiento, Andante con moto, sigue un nódulo complicado durante todo su aparente desenvolvimiento orgánico. Una especie de rondó fragmentario, o un movimiento dentro de la forma sonata con un corto episodio en cambio de un desarrollo. A cuál de las dos formas se ajusta, no interesa mayormente, ya que la inspiración que dictara su escritura es tan notable que se lo cuenta entre las más profundas partituras de Schubert. Escuchándolo, uno se inclina a creer que Schubert no concluye la sinfonía por la simple razón de que no le fue posible hallar nada que igualara la perfección de lo que ya había escrito.
Es en este punto cuando Schubert escribe su Octava Sinfonía (completa o directamente inacabada, quien sabe), y las características de la obra la hacen completamente distinta de todo lo compuesto hasta entonces: los estudiosos que saben de esto aseguran que es, de facto, la primera gran obra auténticamente romántica, la que inaugura la corriente musical de la que luego beberían Schumann, Mendelssohn, Liszt y toda la pléyade de grandes compositores “románticos”.
@ClasicaAlAtardecer
#Sinfonía8#Inconclusa#Schubert#MichailJurowski
SINFONÍA N° 8 EN SI MENOR, D. 759 (INCONCLUSA)
Esta imperecedera sinfonía incompleta podemos considerarla como la obra maestra de Schubert, el compositor vienés que moriría luego de su breve peregrinación terrenal, al igual que Mozart, Purcell, Arriaga o Bellini. La apoteosis del amor se ha llamado a esta inconclusa. El desafortunado y humilde profesor de música nos abre su corazón, desbordando de efusividad, de sincero sentimiento en estas páginas que destilan esencias espirituales, expresadas con su característico lirismo y su poesía inefable.
El nombre de Inacabada o Incompleta (en alemán, Unvollendete) se debe a que solo consta de dos movimientos aunque nada demuestra que Schubert pensara hacer el resto, con lo que la obra podría estar completa. Algunos musicólogos opinan que esta sinfonía anticipa la música de Anton Bruckner.
Se han desarrollado diversas teorías acerca de por qué la sinfonía está incompleta, de por qué Schubert no llegó a finalizar su trabajo. Muchos consideran que, al enterarse tan solo un mes después de comenzar a escribir la sinfonía de que padecía sífilis abandonó la obra y se la dio a su amigo Josef Hüttenbrenner. Este se la regaló a su hermano Anselm, quien finalmente se la entregó a Johann Herbeck, el director que la interpretaría en Viena por primera vez.
Se la considera su obra póstuma, pues aunque es cierto que fue escrita en 1822 no fue estrenada hasta el año 1865, a treinta y cinco años de su muerte prematura, cuando se comenzó a apreciar el valor real de su legado.
A Schubert se le consideraba como un prolífico compositor de obras ricas en melodía, hasta que Schumann primero y tras él, Mendelssohn y Liszt fueron revelando la amplitud, diversidad y profundidad de su producción. El tierno creador del "lied" moderno, incursionó en muchos géneros musicales. A diez una más que Beethoven ascienden las sinfonías compuestas por Schubert.
@ClasicaAlAtardecer
#Sinfonía8#Inconclusa#Schubert#MichailJurowski
Título:Sinfonía No. 8 en Si Menor, D. 759 "Inconclusa"
Autor:Franz Schubert
Movimientos:
🎵 00:43 I. Allegro Moderato
🎵 15:31 II. Andante con moto
Interpretación:
Sinfónica de Galicia
Director:
Michail Jurowski
Fuente:🎼
@ClasicaAlAtardecer
#Sinfonía8#Inconclusa#Schubert#MichailJurowski
SINFONÍA N° 8 EN SI MENOR, D. 759 (INCONCLUSA)
La elección de la tonalidad de Si menor, más sombría que la Si bemol, es un signo indicativo del esfuerzo realizado para lograr un efecto más intenso.
🎵I. Allegro Moderato
El primer movimiento da comienzo con el famoso tema que más tarde, habrá de dominar en el desarrollo. La segunda parte de este motivo inicial, es ejecutada por el clarinete y por el oboe superponiéndose a los violines; luego es interrumpida por algunos acordes: cuatro apacibles compases de los cornos y fagots llevan el segundo tema a los cellos; éste se presenta precedido por su acompañamiento de acordes sincopados. Sobreviene un compás de silencio y el segundo tema aparece por un corto período tras el cual llega a su frase final; un fortissimo Sí, sostenido por los metales y las cuerdas en pizzicato, conduce al fin de la exposición. El desarrollo propiamente dicho, está basado, casi exclusivamente en el primer tema de la Sinfonía. El acompañamiento sincopado del segundo tema vuelve a presentarse, más bien patéticamente, sin su melodía, y la segunda parte del primer tema se desliza sobre los clarinetes y los fagots, justamente antes de iniciar la recapitulación. Esta comienza directamente con la segunda parte del primer motivo (Schubert reserva la primera parte para el final). La recapitulación sigue las normas establecidas para el caso, aunque con un segundo tema en Re mayor. La sección de cierre dramático, sin embargo, termina en Si mayor y conduce a una coda en la tónica menor B. Esto recuerda el tema de apertura para el otro, final, reelaboración dramática de allanar el camino para que los acordes finales enfáticos.
🎵II. Andante con moto
El segundo movimiento, Andante con moto, sigue un nódulo complicado durante todo su aparente desenvolvimiento orgánico. Una especie de rondó fragmentario, o un movimiento dentro de la forma sonata con un corto episodio en cambio de un desarrollo. A cuál de las dos formas se ajusta, no interesa mayormente, ya que la inspiración que dictara su escritura es tan notable que se lo cuenta entre las más profundas partituras de Schubert. Escuchándolo, uno se inclina a creer que Schubert no concluye la sinfonía por la simple razón de que no le fue posible hallar nada que igualara la perfección de lo que ya había escrito.
Es en este punto cuando Schubert escribe su Octava Sinfonía (completa o directamente inacabada, quien sabe), y las características de la obra la hacen completamente distinta de todo lo compuesto hasta entonces: los estudiosos que saben de esto aseguran que es, de facto, la primera gran obra auténticamente romántica, la que inaugura la corriente musical de la que luego beberían Schumann, Mendelssohn, Liszt y toda la pléyade de grandes compositores “románticos”.
@ClasicaAlAtardecer
#Sinfonía8#Inconclusa#Schubert#MichailJurowski
SINFONÍA N° 8 EN SI MENOR, D. 759 (INCONCLUSA)
Esta imperecedera sinfonía incompleta podemos considerarla como la obra maestra de Schubert, el compositor vienés que moriría luego de su breve peregrinación terrenal, al igual que Mozart, Purcell, Arriaga o Bellini. La apoteosis del amor se ha llamado a esta inconclusa. El desafortunado y humilde profesor de música nos abre su corazón, desbordando de efusividad, de sincero sentimiento en estas páginas que destilan esencias espirituales, expresadas con su característico lirismo y su poesía inefable.
El nombre de Inacabada o Incompleta (en alemán, Unvollendete) se debe a que solo consta de dos movimientos aunque nada demuestra que Schubert pensara hacer el resto, con lo que la obra podría estar completa. Algunos musicólogos opinan que esta sinfonía anticipa la música de Anton Bruckner.
Se han desarrollado diversas teorías acerca de por qué la sinfonía está incompleta, de por qué Schubert no llegó a finalizar su trabajo. Muchos consideran que, al enterarse tan solo un mes después de comenzar a escribir la sinfonía de que padecía sífilis abandonó la obra y se la dio a su amigo Josef Hüttenbrenner. Este se la regaló a su hermano Anselm, quien finalmente se la entregó a Johann Herbeck, el director que la interpretaría en Viena por primera vez.
Se la considera su obra póstuma, pues aunque es cierto que fue escrita en 1822 no fue estrenada hasta el año 1865, a treinta y cinco años de su muerte prematura, cuando se comenzó a apreciar el valor real de su legado.
A Schubert se le consideraba como un prolífico compositor de obras ricas en melodía, hasta que Schumann primero y tras él, Mendelssohn y Liszt fueron revelando la amplitud, diversidad y profundidad de su producción. El tierno creador del "lied" moderno, incursionó en muchos géneros musicales. A diez una más que Beethoven ascienden las sinfonías compuestas por Schubert.
@ClasicaAlAtardecer