Перейти к содержанию

Корпус русской поэзии

ruts.datasets.PoetryCorpus

Описание

Модуль для работы с корпусом русской поэзии PoetryCorpus, собранным Ильей Гусевым для библиотеки rupo: 16 694 стихотворения 195 авторов XVIII-XX веков, 13 млн символов. У каждого стихотворения - автор, название (или первая строка), у 12 857 - годы написания (от 1725 до 1996), у 3 904 - темы, всего 20 тем:

Тема Стихотворений Тема Стихотворений
О любви 2 839 О природе 76
Военные 724 Патриотические 72
О дружбе 155 Посвящения 38
Детские 106 остальные 13 тем до 30 каждая
О животных 78

Больше всего стихотворений у Высоцкого (539), Пушкина (401), Блока (286), Ахматовой (277) и Фета (251). Корпус распространяется под лицензией Apache-2.0 и подходит для стилометрии - сравнения авторов и эпох, стиховедения и обучения моделей.

Файл корпуса (27 МБ) загружается из репозитория по закрепленному коммиту и сверяется с контрольной суммой SHA-256; читается потоково, поэтому память не зависит от размера корпуса.

Параметры

Параметр Тип По умолчанию Описание
data_dir str DEFAULT_DATA_DIR.joinpath("texts") Путь к директории с набором данных

Атрибуты

Атрибут Тип Описание
authors Counter Число стихотворений по авторам
themes Counter Число стихотворений по темам

Методы

download

Выполняет загрузку файла корпуса из сети с проверкой контрольной суммы.

Параметры:

Параметр Тип По умолчанию Описание
force bool - Загрузить набор данных, даже если он уже загружен

Пример

Код:

# Загрузка библиотек
from ruts.datasets import PoetryCorpus

# Создание объекта набора данных
pc = PoetryCorpus(data_dir=".")

# Загрузка набора данных
pc.download()

# Отображение информации о наборе данных
pc.info

Результат:

{'Наименование': 'poetry_corpus',
'author': 'Гусев И.О.',
'description': 'Корпус русской поэзии PoetryCorpus',
'license': 'Apache-2.0',
'url': 'https://github.com/IlyaGusev/PoetryCorpus'}

get_texts

Выполняет извлечение текстов (без заголовков) из набора данных.

Параметры:

Параметр Тип По умолчанию Описание
author str - Автор (подстрока без учета регистра)
theme str - Тема (подстрока без учета регистра)
year_from int - Наименьший год написания
year_to int - Наибольший год написания
min_len int - Минимальная длина текста (в символах)
max_len int - Максимальная длина текста (в символах)
limit int - Количество текстов

Стихотворения без года не проходят фильтры по годам.

Пример

Код:

# Загрузка библиотек
from ruts.datasets import PoetryCorpus

# Создание объекта набора данных
pc = PoetryCorpus()

# Отображение извлеченных текстов
for text in pc.get_texts(author="Лермонтов", theme="О любви", limit=1):
    print(text[:60])

Результат:

Благодарю!.. Вчера мое признанье
И стих мой ты без смеха при

get_records

Выполняет извлечение записей (с заголовками) из набора данных. Поля записи: author - автор, title - название или первая строка, themes - кортеж тем (пустой без разметки), year_from и year_to - годы написания (None без даты), text - текст.

Параметры те же, что у get_texts.

Пример

Код:

# Загрузка библиотек
from ruts import WordsExtractor
from ruts.corpus import delta
from ruts.datasets import PoetryCorpus

# Создание объекта набора данных
pc = PoetryCorpus()

# Дельта Барроуза между поэтами по всем их стихотворениям
we = WordsExtractor(lowercase=True)
corpus = {
    author: we.extract("\n".join(pc.get_texts(author=author)))
    for author in ("Александр Пушкин", "Михаил Лермонтов", "Анна Ахматова", "Владимир Высоцкий")
}
delta(corpus, n_mfw=200, variant="cosine").round(2)

Результат:

                   Александр Пушкин  Михаил Лермонтов  Анна Ахматова  Владимир Высоцкий
Александр Пушкин               0.00              1.03           1.39               1.43
Михаил Лермонтов               1.03              0.00           1.38               1.52
Анна Ахматова                  1.39              1.38           0.00               1.23
Владимир Высоцкий              1.43              1.52           1.23               0.00