R. Text Mining. Rap
Популярность многих современных рэп исполнителей остается для меня и других приверженцев “старой школы” большой загадкой. Постоянные споры о том, кто лучше, чьи тексты интереснее, чья музыка разнообразнее занимают умы многих интернет-пользователей. Чтобы подтвердить эти споры не просто словами, а фактами я проанализировал тексты четырех российских рэп исполнителей, используя для этого язык программирования R.
Часть из них были безумно популярны в начале 2000-х годов. Сейчас они все также привлекают своих слушателей, но их, к сожалению, становится все меньше. А двое сейчас находятся на пике своей популярности и привлекают обширную и, в основном, молодую аудиторию. И мой дальнейший разбор покажет, что учитывая словарный запас, который они используют, этот факт не вызывает радости. Узнать кто есть кто будет довольно просто, ведь артисты, чьи песни я использовал это: Каста, Noize-Mc, Фараон и Моргенштерн. Думаю, всем понятно, что Касту и Нойза я буду относить к «старой школе», а Фараона и Моргенштерна к «новой».
Альбомы для анализа
Для анализа я отобрал все студийные официальные альбомы вышедшие у исполнителей (информация об альбомах была взята с сайта www.wikipedia.com, вся литература в конце):
- Kasta: «Громче воды, выше травы»; «Быль в глаза»; «Четырёхглавый Орёт»; «Об изъяне понятно» — 74 трека.
- Noize Mc: «The Greatest Hits Vol. 1»; «Последний альбом»; «Новый альбом»; «Protivo Gunz»; «Неразбериха»; «Hard Reboot 3.0»; «Царь горы»; «Хипхопера: Орфей & Эвридика» — 160 треков.
- Pharaoh: «Уаджет»; «Phlora»; «Dolor»; «Phosphor»; «Pink Phloyd»; «Phuneral»; «Правило» — 95 треков.
- Morgenshtern: «До того как стал известен»; «Улыбнись, дурак!»; «Легендарная пыль» — 30 треков.
Я специально подбирал вышеупомянутых артистов так как даже те, кто хоть немного знаком с их творчеством, согласятся, что тексты очень сильно отличаются (Каста + Нойз vs Фараон + Моргенштерн) и будет интересно сравнить их между собой. Возникает логичный вопрос: как можно объективно и правильно сравнить четыре альбома Касты и восемь альбомов Фараона? Все очень просто — после некоторых манипуляций, о которых я расскажу дальше, объем слов станет более-менее сопоставимым. Ведь, как всем известно, количество не равно качество.
Для сбора самих слов я использовал сайт genius.com и их API. К счастью, разработчики сервиса предоставляют открытый интерфейс программирования приложений (API) позволяющий достаточно легко извлекать тексты песен (по артистам, альбомам) из базы данных для их последующего анализа.
Весь анализ был произведён с использованием языка программирования R, плюс для стемминга (процесс нахождения основы слова для заданного исходного слова) использован был python, так как не получалось совладать с кодировкой в R и программой mystem (Windows 10 не очень любит дружить с UTF-8 и R, говорят используя яблочную ОС либо Линукс таких проблем не возникает).
До обработки. Обзор Текстов. Количество слов
Для загрузки текстов песен использовалась библиотека «genius». Функция из этого пакета «genius_album» очень легко позволяет скачать сразу все тексты по альбомам. Будьте внимательны и перепроверяйте, так как не всегда для всех исполнителей имеются все тексты песен, некоторые из них пришлось добавлять вручную. После загрузки стало интересно, какое количество слов используется в песнях в целом (вместе с местоимениями, предлогами, частицами и и тд). Потом мы сравним эти цифры с уже обработанными стеммингом и стоп-словами результатами. Чтобы проще понимать соотношение количества альбомов и треков к количеству используемых слов я еще раз продублирую эту информацию:
- Noize Mc — 8 альбомов, 160 треков.
- Каста — 4 альбома, 74 трека.
- Фараон — 7 альбомов, 95 треков.
- Моргенштерн — 3 альбома, 30 треков.
![image](https://habrastorage.org/webt/1t/y3/al/1ty3alh-0epjabibxofs6mknnua.png)
Интересно, что Фараон и Нойз имеют практически одинаковое количество альбомов (семь и восемь соответственно), но, как видно из графика, качество альбомов сильно отличается как по количеству песен, так и по насыщенности словарного запаса (57962 vs 24184).
Для того, чтобы минимизировать эту разницу и сделать сравнение более корректным и правильным, было подсчитано сколько в среднем слов использует тот или иной артист в одной своей песне:
- Noize Mc — 362 слова.
- Каста — 388 слов.
- Фараон — 254 слова.
- Моргенштерн — 273 слова
Понятно, что такое сравнение является условным и довольно приблизительным, однако цифры говорят сами за себя.
А так выглядит топ 10 слов у каждого из артистов и количество упоминаний этих слов:
![image](https://habrastorage.org/webt/pe/ge/jo/pegejoisntohgpxoobeqfblugpo.png)
![image](https://habrastorage.org/webt/hi/xf/tx/hixftxbrbn4agxhksikjukrt9pk.png)
Как и следовало ожидать, без обработки «топ-словами» являются предлоги, местоимения и союзы, которые не отражают никаких результатов и не несут особой смысловой нагрузки. Поэтому на данном этапе ничего интересного и неожиданного не произошло.
Следующим этапом была обработка и подготовка текстов для анализа. Процесс стеммизации был произведён с помощью программы mystem от Yandex в Python, которая доступна для каждого. Данный шаг был проделан для того, чтобы понять сколько уникальных слов используют артисты и насколько широко они задействуют русский язык в своих текстах. Ведь ошибкой было бы посчитать одно и тоже слово в разных падежах несколько раз. Это показывает вариативность и способность певца склонять, а не широту его словарного запаса.
Также для того, чтобы получить более репрезентативный результат необходимо избавиться от стоп-слов, которые не несут эмоциональной и смысловой нагрузки (предлоги, местоимения, частицы и др.). К сожалению, в R пакетах нету хороших библиотек где бы содержались стоп-слова для русского языка. Хочу обратить ваше внимание на то, что автор сам должен определять является то или иное слово стоп-словом и нужно ли его удалять. Всегда внимательно просматривайте данного рода словари, чтобы не отсеять нужное и полезное для вас слово. Пакет «stopwords» поддерживает довольно много языков, но я предпочёл использовать слова с внешнего ресурса со своей доработкой.
После обработки
Как видно из графика количество слов значительно уменьшилось после стемминга и удаления стоп-слов. Это не удивительно учитывая, что почти все первоначальные самые популярные слова попали в стоп.
![image](https://habrastorage.org/webt/mb/2_/ez/mb2_ezlrkhffyciyuvka2_z2_l0.png)
В целом, количество слов, которые остались после стемминга и удаления стоп-слов, в процентном соотношении к первоначальному количеству практически равны у всех. Стоит отметить, что равны и в группах. В «старой школе» это 55-58%, в «новой» 46-50%.
Очень важная и интересная информация — это количество уникальных слов у каждого из артистов. У Нойза это 8891 слово, у Касты 5307, у Фараона 3899 и у Моргенштерна 1242. Кто хочет немного расширить свой словарный запас, но не хочет читать книги, может слушать Noize Mc и Касту.
Конечно, многим интересно какие слова лидируют теперь, после обработки. Представляю графики с топ 10 слов для каждого исполнителя:
![image](https://habrastorage.org/webt/lo/ie/i-/loiei-faaqshktl8ubc7bjghy24.png)
![image](https://habrastorage.org/webt/-d/de/g1/-ddeg1cq-omh6m35uvxomf_gkrm.png)
Наверняка многим из читающих бросились в глаза слова со звёздочками. У Фараона и Моргенштерна действительно в текстах очень много ненормативной лексики, которая, по моему личному мнению, довольно негативно сказывается на полноценной структуре текста и его восприятии. У этих двух исполнителей одно и тоже слово занимает вторую позицию. Слово, которое прекрасно демонстрирует дух и культуру их музыки. Чуть позже, я наглядно продемонстрирую какой эмоциональный оттенок лидирует в текстах исполнителей.
Общие слова. Сравнение слов
Чтобы сделать информацию более наглядной, я поместил все слова исполнителей на одном графике используя для этого функцию «comparison.cloud» из пакета «wordcloud», так их легче сравнивать и воспринимать (и опять мы можем видеть как выделяются маты). Показывать слова с помощью bar plots может быть довольно проблематично, так как при большем их количестве требуется много места. Также хорошей функцией из одноименного пакета является «wordcloud2»: при наведении на слово появляется окно, которое показывает частоту его использования.
![image](https://habrastorage.org/webt/w0/u1/gj/w0u1gjirnpp3jm4rv2ya-ndho8q.jpeg)
Так как артисты для написания своих песен используют один язык, будет интересно посмотреть, без разделения на исполнителей, какие слова они чаще всего употребляют. Для данного графика была использована функция commonality.cloud из пакета «wordcloud». Размер шрифта соответствует частоте упоминаний слова в текстах.
![image](https://habrastorage.org/webt/y2/hz/9c/y2hz9cp1-7l9c_lxjyaadf4gggw.png)
Сентиментальный анализ текста
У каждого фильма, книги или песни есть своё настроение, которое передаётся зрителям или слушателям и воздействует на них. Интересно увидеть какое настроение транслируют своим слушателям исполнители старой и новой школы. Узнать это можно проанализировав, слова из какой категории: «Негативные», «Позитивные», «Нейтральные», преобладают в песнях музыкантов. Как и ожидалось, для русского языка не имеется довольно качественного словаря с сентиментальным анализом слов для R (если кто-то знает такой, просьба поделиться). Поэтому пришлось использовать внешний со своим апгрейдом (ссылка на словарь в конце текста).
Не все слова имели соответствия в словаре, что конечно немножечко грустно, с английским языком таких проблем практически не возникает. Поэтому я решил показать эмоциональную окраску наиболее часто повторяющихся слов. Именно эти слова слушатель чаще всего слышит, и именно они оказывают на него наиболее сильное воздействие и определяют восприятие всей песни. В целом, если читатель хоть немного знаком с творчеством всех авторов, то он вряд ли удивится. Ну а если для кого-то анализируемые имена в новинку, то please welcome, знакомьтесь с их творчеством. Ниже вы можете увидеть графики. Для всех артистов показаны наиболее часто используемые слова.
Моргенштерн. Частота повторения слова более 10 раз. Довольно сильно выделяется обильное количество красных столбцов, а если разобраться что это за слова, то становится вдвойне печально от того, какой посыл этот исполнитель несет своей аудитории.
![image](https://habrastorage.org/webt/qt/_e/y1/qt_ey1umud_z-zn2znjyrhvdwji.png)
Фараон. Лексикон также оставляет желать лучшего. Частота более 20 раз.
![image](https://habrastorage.org/webt/dj/nk/xr/djnkxr6i2bgnuwkqms2b49giqh4.png)
Далее время для старожилов российской рэп сцены. Те, за кого действительно не стыдно, и можно рекомендовать для прослушивания.
Каста. Яркое преобладание слов с позитивным оттенком. Да и негативные слова не шокируют своей безнравственностью. Частота >= 25
![image](https://habrastorage.org/webt/ww/wz/pe/wwwzpes--ubtdgv2gjnbeix_foi.png)
Ну и напоследок, мастер рифмы и слова Noize Mc (частота >= 30).
![image](https://habrastorage.org/webt/et/vm/5o/etvm5ojqpcpgpmsvhvhretikqx4.png)
Обилие негативно окрашенной лексики, которую используют в своих песнях Моргенштерн и Фараон, сказывается на восприятии их песен и на том настроении, которое они транслируют. Сложно получать приятные эмоции от музыки, когда она изо всех сил навязывает тебе обратное.
Так как используемый словарь с сентиментальным разбором содержит в себе далеко не все слова, трудно сделать стопроцентный и уверенный вывод о настроении песен у артистов, так как многое зависит также и от контекста. Однако, я покажу вам сколько и каких слов используют артисты (из того, что удалось присоединить).
![image](https://habrastorage.org/webt/c8/sx/gm/c8sxgmbgegdpongmzk6apgxfzmw.png)
Очевидно, что большинство слов у всех артистов имеют нейтральный оттенок, который практически никак не влияет на слушателя. Но, что интересно, Фараон и Моргенштерн используют больше слов с негативным оттенком чем с позитивным. И это, несмотря на неполноценность словаря и отсутствие там множества нецензурных слов и их вариаций (словарь содержит 28248 слов и часть из них мне пришлось добавлять вручную).
![image](https://habrastorage.org/webt/uq/l1/ji/uql1jic_q84eaqv1vvomohbzbqi.png)
У Касты и Нойз Мс также лидируют нейтральные слова, но на втором месте находятся позитивные, которые не вызывают у нас отрицательных эмоций.
Да, несомненно, влияние контекста в данном виде анализа я оценить не могу и, например, слово «люблю» может быть использовано с частицей «не» и иметь негативную окраску. Но согласитесь, фраза “Я тебя не люблю” является более приятной, чем фраза «Я тебя ненавижу». И негатив этой фразы не исправит даже частица «не». Мы все равно будем слышать только слово «Ненавижу”.
Музыкальный вкус дело индивидуальное и каждый сам решает, что ему слушать. Но взгляните еще раз на графики и подумайте, чем вы хотите наполнить свои будни. Музыка сопровождает нас везде и часто очень сильно влияет на наше настроение, так зачем осознанно каждый день делать его хуже?
А вообще эта статья еще про то, что программирование может быть интересным и применяться в различных сферах. Оно может показывать уже знакомую информацию под новым углом, заставлять задуматься над тем, что казалось очевидным или незначительным. Только от вас зависит, что будет скрываться за строками кода и что интересное они расскажут.
Учите языки программирования, развивайтесь и слушайте качественную музыку на написание которой уходит более семи дней онлайн времени на ютубе. Для тех кто не в курсе, альбом Моргенштерна «Легендарная Пыль» записывался 6 дней во время онлайн трансляций на ютубе и в итоге стал самым успешным в карьере Моргенштерна, набрав ВКонтакте миллион прослушиваний за первые полчаса релиза и пять миллионов прослушиваний за одиннадцать часов. За первые два дня после релиза альбом прослушали ВКонтакте более 21 миллиона раз, что является рекордом для социальной сети.
Список используемой литературы:
1. ru.wikipedia.org/wiki/Noize_MC
2. ru.wikipedia.org/wiki/Pharaoh
3. ru.wikipedia.org/wiki/Каста_(группа)
4. ru.wikipedia.org/wiki/Моргенштерн_(музыкант)
5. github.com/stopwords-iso/stopwords-ru/blob/master/stopwords-ru.txt (стоп-слова)
6. github.com/dkulagin/kartaslov/tree/master/dataset/emo_dict (словарь сентиментов).
Лицензия: creativecommons.org/licenses/by-nc-sa/4.0
7. ru.wikipedia.org/wiki/Легендарная_пыль