Пакет для оценки формульности фольклорных песен на русском языке
Project description
Formularity RFS — пакет для автоматической оценки формульности фольклорных песен на русском языке
Пакет создан для поиска «формул» в фольклорных песнях и для оценки формульности народных лирических произведений. Под «формулами» понимаются повторяющиеся элементы, присущие фольклорным песням на русском языке, по А. Дауру: «под понятие формульности следует подводить все то, что, часто повторяясь, заключает в себе понятие типического для жанра».
Пакет рассчитает коэффициент формульности ваших текстов и на выходе предоставит размеченный файл для визуальной демонстрации «формул» в текстах.
Содержание
- Коэффициент формульности
- Технологии и инструменты
- Подготовка данных
- Установка и начало работы
- Пример ввода и вывода
- Результаты
- Предложить изменения
- Контакты
- Подробнее
Коэффициент формульности
Коэффициент формульности состоит из нескольких элементов:
- коэффициент VocD;
- коэффициент для фразеологизмов;
- коэффициент для междометий;
- коэффициент для «биномов»;
- коэффициент для n-грамм.
Коэффициент VocD — это коэффициент лексического разнообразия текста, усовершенствованная версия критикуемого коэффициента TTR (отношение повторяющихся лемм к общему количеству слов в тексте). В коде VocD рассчитывается как среднее из 1000 значений на отрезках из 35 лексических единиц текстов. Именно поэтому тексты, содержащие менее 35 слов, нельзя проанализировать этим пакетом.
Коэффициент для фразеологизмов — это добавочный коэффициент для текстов, содержащих «формулы»-фразеологизмы. Такие «формулы» упоминаются в работах А.Т. Хроленко «Поэтическая фразеология русской народной лирической песни» как «устойчивые словесные комплексы», Б. Фера «Die formelhaften Elemente in den alten englischen Balladen» как «формульные словосочетания», а также Г.И. Мальцева «Русские народные формулы в необрядовой лирике». Формулы в текстовом файле пакета collocations.txt были получены благодаря анализу повторяющихся словосочетаний в русских народных песнях, которые были получены путем парсинга страниц отсюда. В файл с фразеологизмами вошли, например, «добрый молодец», «красная девица» и другие. Список найденных фразеологизмов будет доступен в окне выходных данных, а их разметка — в файле results.html на выходе. Каждый уникальный фразеологизм в тексте прибавляет 0.1 к итоговому коэффициенту.
Коэффициент для междометий — это добавочный коэффициент для текстов, содержащих междометия. Междометия, повторяемые с определенной периодичностью, служат своего рода «структурными элементами» песни, не только выражая эмоции, но и помогая «сказителям» начинать песню и поддерживать ее ритм. С.Б. Адоньева в работе «Звуковые формулы в ритуальном фольклоре» определяет звуковые комплексы, устойчиво сохраняющиеся в песенных фольклорных произведениях и выполняющие в них определенные конструктивные функции, которые оказываются устойчивыми в отношении набора и последовательности звуков, ритмической организации, позиции в тексте. Список найденных междометий будет доступен в окне выходных данных, а их разметка — в файле results.html на выходе. Каждое уникальное междометие в тексте прибавляет 0.1 к итоговому коэффициенту.
Коэффициент для «биномов» — это добавочный коэффициент для текстов, содержащих сложные слова с дефисным написанием. Под «биномами» понимаются все слова с дефисным написанием кроме местоимений. Такие «биномы», с одной стороны, позволяют «сказителям» применить сравнение в ограниченных условиях ритма («Волга матушка-река»), а с другой — поддержать звуковую и ритмическую симметрию («Поутру раным-раненько,/ По утру раным-ранешенько») , иногда — дуальность («Красавица-изменница», «ласки-взоры») и параллелизм («Он кудрями, кудрями/ Потрясёт-потрясёт, / Жницам горелочки/ Поднесёт-поднесёт»). Список найденных «биномов» будет доступен в окне выходных данных, а их разметка — в файле results.html на выходе. Каждый уникальный «бином» в тексте прибавляет 0.1 к итоговому коэффициенту.
Коэффициент для n-грамм — это добавочный коэффициент для текстов, содержащих повторяющуюся последовательность от 2 до 14 лемм. Алгоритм для автоматического выявления формул в поэтическом тексте был взят из доклада Дмитрия Николаева. Стоп-лист исследователя был расширен — туда вошли и междометия для корректой работы пакета. Стоп-лист (stopwords.txt), как и список фразеологизмов (collocations.txt), необходимы для начала работы с пакетом. Пакет ищет n-граммы от большего к меньшему, исключая вхождение одного и того же слова в несколько n-грамм. Список найденных n-грамм и их разметка будет доступна в файле results.html на выходе. Каждая уникальная n-грамма в тексте прибавляет 0.1 к итоговому коэффициенту.
Таким образом, итоговый коэффициент формульности фольклорной песни можно описать формулой: Коэффициент VocD + 0.1 * (кол-во фразеологизмов) + 0.1 * (кол-во междометий) + 0.1 * (кол-во «биномов») + 0.1 * (кол-во уникальных n-грамм).
Технологии и инструменты
Проект использует ряд библиотек и инструментов для обработки текстов, включая:
- Python 3 — язык программирования проекта.
- spaCy — библиотека для обработки естественного языка, используемая для токенизации и определения частей речи (POS-тегов).
- ru_core_news_sm — модель spaCy для русского языка.
- pymorphy2 — библиотека для морфологического анализа русского языка, используемая для лемматизации слов.
- NumPy — библиотека для работы с массивами и числовыми данными.
- scikit-learn — библиотека для машинного обучения, используется для поиска n-грамм.
- collections — стандартный модуль Python, используемый для работы с коллекциями данных.
- re (регулярные выражения) — для поиска и замены текста по шаблону.
- os — для работы с файловой системой.
Подготовка данных
Перед началом работы с пакетом необходимо подготовить ваши данные для анализа. Вы можете создать файл songs.txt или воспользоваться пустым файлом songs.txt, который будет создан при первом запуске пакета. Данные следует оформить, используя знак «+» между разными песнями.
✅ Конец одной песни + Начало новой песни
❌ Конец одной песни Начало новой песни
Также учитывайте, что пакет не сможет проанализировать тексты, содержащие менее 35 слов.
Установка и начало работы
1) Перед установкой пакета загрузите библиотеки, которые он использует.
Код для облачной среды Google Colab:
!pip install -U spacy
!pip install -U spacy-lookups-data
!python -m spacy download ru_core_news_sm
!pip install pymorphy2
2) Установите пакет formularity-rfs.
Код для облачной среды Google Colab:
!pip install formularity-rfs==0.3
или
!pip install --upgrade git+https://github.com/valsidnenko/formularity_rfs.git
3) Загрузите необходимые файлы для работы пакета collocations.txt и stopwords.txt вручную или с помощью команд.
Код для облачной среды Google Colab:
!wget https://raw.githubusercontent.com/valsidnenko/formularity_rfs/main/stopwords.txt
!wget https://raw.githubusercontent.com/valsidnenko/formularity_rfs/main/collocations.txt
4) Импортируйте загруженные библиотеки.
Код для облачной среды Google Colab:
import re
import spacy
import pymorphy2
import numpy as np
from collections import defaultdict
from sklearn.feature_extraction.text import CountVectorizer
nlp = spacy.load("ru_core_news_sm")
5) Импортируйте функцию анализа из пакета formularity_rfs.
Код для облачной среды Google Colab:
from formularity.your_module import analyse
6) Введите команду для анализа текстов.
Код для облачной среды Google Colab:
analyse()
Что произойдет дальше?
-
Если у вас не было файла songs.txt, такой пустой файл будет создан в течение минуты. Туда следует добавить тексты согласно инструкции, а затем вновь вызвать команду analyse().
-
Если файл songs.txt содержит менее 35 слов, пакет не сможет проанализировать его и появится текст «Невозможно посчитать VOCD». Почему так происходит — здесь.
-
Если песни из songs.txt были проанализированы, в выходных данных для каждой песни вы увидите:
- список лемматизированных слов
- список найденных междометий
- список найденных «биномов»
- список найденных фразеологизмов
- список найденных n-грамм
- коэффициент для междометий
- коэффициент для фразеологизмов
- коэффициент для «биномов»
- коэффициент для n-грамм
- коэффициент VOCD
В конце будет надпись «Результаты записаны в файл results.html, он появится в течение минуты.» Подробнее о результатах можно узнать здесь.
Пример ввода и вывода
Рассмотрим пример ввода и вывода.
После команды analyse() вводим в файл songs.txt две версии песни «Чёрный ворон»:
Чёрный ворон, что ты вьёшься
Над моею головой.
Ты добычи не дождёшься:
Чёрный ворон! — я не твой!
Ты лети-ка, чёрный ворон,
К нам на славный Тихий Дон.
Отнеси-ка, чёрный ворон,
Отцу, матери поклон,
Отцу, матери поклон
И жененке молодой,
Ты скажи ей, чёрный ворон,
Что женился на другой,
На пулечке свинцовой.
Наша свашка — была шашка,
Штык булатный — был дружком,
А венчался я на поле
Под ракитовым кустом. **+**
Под ракитою зелёной
Казак раненый лежал.
Ой да под зелёной
Казак раненый лежал.
Прилетела птица-ворон,
Начал каркать над кустом.
Ой да над ним вился чёрный ворон
Чуя лакомый кусок
Ты не каркай, чёрный ворон,
Над моею головой
Ой да чёрный ворон
Я казак ещё живой.
Ты слетай-ка, чёрный ворон,
К отцу, к матери домой.
Передай платок кровавый
Моей жинке да молодой
Ты скажи-ка, чёрный ворон,
Что женился да на другой.
Что нашёл себе невесту
В чистом поле за рекой
Была свадьба тиха, смирна,
Под ракитовым кустом.
Ой да тиха, смирна
Под ракитовым кустом.
Была сваха — сабля востра,
Штык булатный был дружком.
Ой да сабля востра,
Штык булатный был дружком.
Поженила пуля быстро,
Нас в час битвы роковой.
Вижу, смерть моя приходит,
Чёрный ворон, весь я твой!
Запускаем команду analyse() снова и в окне вывода видим первые результаты:
Лемматизированные слова: ['куст', 'чёрный', 'поле', 'отец', 'на', 'чёрный', 'жененка', 'ворон', 'наш', 'голова', 'на', 'свашка', 'шашка', 'к', 'на', 'мой', 'не', 'что', 'поклон', 'венчаться', 'мать', 'славный', 'чёрный', 'ты', 'дон', 'булатный', 'мать', 'виться', 'отец', 'твой', 'над', 'ка', 'дружок', 'и', 'под', 'мы', 'ворон', 'дождаться', 'ты', 'штык', 'лететь', 'не', 'она', 'ты', 'пулечка', 'ракитов', 'молодой', 'ворон', 'быть', 'сказать', 'ка', 'другой', 'свинцовый', 'что', 'я', 'чёрный', 'ворон', 'добыча', 'чёрный', 'а', 'я', 'отнести', 'жениться', 'на', 'ты', 'тихий', 'быть', 'ворон', 'поклон']
Междометия: []
Биномы: []
Найденные фразеологизмы: ['черный ворон']
Найденные уникальные n-граммы: ['отцу матери поклон', 'черный ворон']
Коэффициент для междометий: 0.0
Коэффициент для фразеологизмов: 0.1
Коэффициент для биномов: 0.0
Коэффициент для n-грамм: 0.2
Коэффициент VOCD: 0.7920000000000003
Лемматизированные слова: ['платок', 'под', 'быть', 'да', 'казак', 'час', 'сабля', 'себя', 'булатный', 'быть', 'ракитов', 'ворон', 'приходить', 'ракита', 'каркать', 'свадьба', 'лежать', 'видеть', 'кусок', 'ой', 'чёрный', 'смерть', 'раненый', 'я', 'передать', 'пуля', 'ворон', 'другой', 'над', 'голова', 'тихий', ' ', 'смирна', 'дружок', ' ', 'отец', 'над', 'виться', 'ворон', 'к', 'под', 'мой', 'ой', 'чёрный', 'поле', ' ', ' ', 'штык', 'куст', 'ты', 'быть', 'ой', 'смирна', 'ой', 'под', 'битва', 'ещё', 'мой', 'за', 'казак', 'вострый', 'птица', 'ворон', 'слетать', ' ', 'быть', 'зелёный', 'ворон', 'казак', 'раненый', 'жениться', 'они', 'булатный', 'быстро', 'штык', 'чуя', 'сабля', 'да', ' ', 'на', 'куст', 'чистый', 'ты', 'ракитов', 'да', 'сказать', 'кровавый', 'начать', 'вострый', 'да', 'мой', 'дружок', 'лежать', 'река', 'ка', 'да', 'ка', 'к', 'жинка', 'невеста', 'в', 'найти', 'роковой', 'не', 'прилететь', 'в', 'чёрный', 'ты', 'ой', 'чёрный', 'что', 'под', 'живой', 'ворон', 'чёрный', 'тихий', 'мать', 'что', 'над', 'да', 'ворон', 'мы', 'чёрный', 'лакомый', 'молодой', 'каркать', 'зелёный', 'весь', ' ', 'поженить', 'твой', 'домой', ' ', 'сваха', 'куст', 'да', 'я']
Междометия: ['Ой', 'Ой', 'Ой']
Биномы: ['птица-ворон']
Найденные фразеологизмы: ['чистом поле', 'черный ворон']
Найденные уникальные n-граммы: ['сабля востра штык булатный был дружком', 'зеленой казак раненый лежал', 'тиха смирна ракитовым кустом', 'черный ворон']
Коэффициент для междометий: 0.30000000000000004
Коэффициент для фразеологизмов: 0.2
Коэффициент для биномов: 0.1
Коэффициент для n-грамм: 0.4
Коэффициент VOCD: 0.8070666666666668
Результаты записаны в файл results.html, он появится в течение минуты.
В окне вывода мы видим первичные результаты — они нужны, чтобы убедиться, что программа посчитала всё правильно. Дожидаемся появления файла results.html и внутри видим итоговые результаты с итоговым коэффициентом формульности и разметкой:
Результаты
В размеченном файле results.html на выходе вы увидите результаты анализа песен и коэффициенты их формульности.
🟢 Зелёным цветом будут выделены найденные n-граммы. Для точности они также будут продублированы ниже списком.
🟣 Фиолетовым цветом будут выделены найденные «биномы».
🔴 Красным цветом будут выделены найденные междометия.
🔵 Синим цветом будут выделены найденные фразеологизмы.
Подробнее о том, что означает коэффициент и разметка, можете узнать здесь же или в тексте моей магистерской диссертации.
Предложить изменения
Буду рада вашим предложениям и улучшениям для этого проекта! Пожалуйста, следуйте нижеприведённым шагам, чтобы предложить свои изменения:
-
Форкните этот репозиторий. Это можно сделать, нажимая кнопку «Fork» в верхней части страницы репозитория на GitHub.
-
Клонируйте форкнутый репозиторий на ваш локальный компьютер:
Код:
git clone https://github.com/valsidnenko/formularity_rfs.git
- Создайте новую ветку для ваших изменений. Рекомендуется назвать ветку так, чтобы отражать суть изменения:
Код:
git checkout -b имя-вашей-ветки
- Внесите изменения и закоммитьтесь:
Код:
git add .
git commit -m "Краткое описание ваших изменений"
- Запушьте ваши изменения на ваш форк:
Код:
git push origin имя-вашей-ветки
- Перейдите на страницу вашего форка на GitHub и создайте Pull Request. Подробнее о том, как это сделать, можно прочитать в официальной документации GitHub.
Пожалуйста, обязательно включите следующие детали в ваш Pull Request:
- Краткое описание изменений.
- Обоснование, почему эти изменения необходимы.
- Любые связанные вопросы.
Спасибо за вклад в развитие проекта!
Если у вас возникнут какие-либо вопросы или затруднения, не стесняйтесь обращаться ко мне через контакты.
Контакты
По любым вопросам и предложениям можно написать мне:
- на почту: valsidnenko@gmail.com
- в Telegram: @necha1
Подробнее
Здесь будет ссылка на работу, в рамках которой был сделан этот пакет!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file formularity_rfs-0.3.tar.gz.
File metadata
- Download URL: formularity_rfs-0.3.tar.gz
- Upload date:
- Size: 25.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9588a9e47c6cb9b540cfab3b0c8e6d33e837914a5c81263978484934972667c2
|
|
| MD5 |
f8d844e50e30104573c1eaff4883644d
|
|
| BLAKE2b-256 |
f8c2e35e33511fd8eb48d61dc5f36fee418966e970fb88f02661807e6469597a
|
File details
Details for the file formularity_rfs-0.3-py3-none-any.whl.
File metadata
- Download URL: formularity_rfs-0.3-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3af03d2949e134bc28b5bf0fe502f6b2833fe6867bd404d4e441243c8124397
|
|
| MD5 |
c6ae5ace9ef3308ac7a440e612eb7987
|
|
| BLAKE2b-256 |
a4cdc0930f9e92dcbf242f692d9de5698d247db32bcf8c1373b820dfc15e24b2
|