Skip to main content

Пакет для оценки формульности фольклорных песен на русском языке

Project description

Formularity RFS — пакет для автоматической оценки формульности фольклорных песен на русском языке

Пакет создан для поиска «формул» в фольклорных песнях и для оценки формульности народных лирических произведений. Под «формулами» понимаются повторяющиеся элементы, присущие фольклорным песням на русском языке, по А. Дауру: «под понятие формульности следует подводить все то, что, часто повторяясь, заключает в себе понятие типического для жанра».

Пакет рассчитает коэффициент формульности ваших текстов и на выходе предоставит размеченный файл для визуальной демонстрации «формул» в текстах.

Содержание

Коэффициент формульности

Коэффициент формульности состоит из нескольких элементов:

  1. коэффициент VocD;
  2. коэффициент для фразеологизмов;
  3. коэффициент для междометий;
  4. коэффициент для «биномов»;
  5. коэффициент для 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 были проанализированы, в выходных данных для каждой песни вы увидите:

    1. список лемматизированных слов
    2. список найденных междометий
    3. список найденных «биномов»
    4. список найденных фразеологизмов
    5. список найденных n-грамм
    6. коэффициент для междометий
    7. коэффициент для фразеологизмов
    8. коэффициент для «биномов»
    9. коэффициент для n-грамм
    10. коэффициент 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 и внутри видим итоговые результаты с итоговым коэффициентом формульности и разметкой:

2024-06-07-21-59-21.png

Результаты

В размеченном файле results.html на выходе вы увидите результаты анализа песен и коэффициенты их формульности.

🟢 Зелёным цветом будут выделены найденные n-граммы. Для точности они также будут продублированы ниже списком.

🟣 Фиолетовым цветом будут выделены найденные «биномы».

🔴 Красным цветом будут выделены найденные междометия.

🔵 Синим цветом будут выделены найденные фразеологизмы.

Подробнее о том, что означает коэффициент и разметка, можете узнать здесь же или в тексте моей магистерской диссертации.

Предложить изменения

Буду рада вашим предложениям и улучшениям для этого проекта! Пожалуйста, следуйте нижеприведённым шагам, чтобы предложить свои изменения:

  1. Форкните этот репозиторий. Это можно сделать, нажимая кнопку «Fork» в верхней части страницы репозитория на GitHub.

  2. Клонируйте форкнутый репозиторий на ваш локальный компьютер:

Код:

git clone https://github.com/valsidnenko/formularity_rfs.git
  1. Создайте новую ветку для ваших изменений. Рекомендуется назвать ветку так, чтобы отражать суть изменения:

Код:

git checkout -b имя-вашей-ветки
  1. Внесите изменения и закоммитьтесь:

Код:

git add .
git commit -m "Краткое описание ваших изменений"
  1. Запушьте ваши изменения на ваш форк:

Код:

git push origin имя-вашей-ветки
  1. Перейдите на страницу вашего форка на GitHub и создайте Pull Request. Подробнее о том, как это сделать, можно прочитать в официальной документации GitHub.

Пожалуйста, обязательно включите следующие детали в ваш Pull Request:

  • Краткое описание изменений.
  • Обоснование, почему эти изменения необходимы.
  • Любые связанные вопросы.

Спасибо за вклад в развитие проекта!

Если у вас возникнут какие-либо вопросы или затруднения, не стесняйтесь обращаться ко мне через контакты.

Контакты

По любым вопросам и предложениям можно написать мне:

Подробнее

Здесь будет ссылка на работу, в рамках которой был сделан этот пакет!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

formularity_rfs-0.3.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

formularity_rfs-0.3-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

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

Hashes for formularity_rfs-0.3.tar.gz
Algorithm Hash digest
SHA256 9588a9e47c6cb9b540cfab3b0c8e6d33e837914a5c81263978484934972667c2
MD5 f8d844e50e30104573c1eaff4883644d
BLAKE2b-256 f8c2e35e33511fd8eb48d61dc5f36fee418966e970fb88f02661807e6469597a

See more details on using hashes here.

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

Hashes for formularity_rfs-0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b3af03d2949e134bc28b5bf0fe502f6b2833fe6867bd404d4e441243c8124397
MD5 c6ae5ace9ef3308ac7a440e612eb7987
BLAKE2b-256 a4cdc0930f9e92dcbf242f692d9de5698d247db32bcf8c1373b820dfc15e24b2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page