Корпус русской поэзии¶
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