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

Русская классическая литература

ruts.datasets.RussianLiterature

Описание

Модуль для работы с собранием русской классической литературы RusLit (на Kaggle - russian-literature): 373 произведения 12 авторов XIX - начала XX века, 39 млн символов, три жанра:

Жанр Ключ Авторы Произведений
Проза prose Чехов (77), Толстой (42), Достоевский (33), Горький (33), Брюсов (30), Гоголь (16), Герцен (11), Пушкин (10), Тургенев (10), Блок (4), Лермонтов (3) 269
Поэзия poems Пушкин (35), Лермонтов (18), Некрасов (15), Блок (10) 78
Публицистика publicism Толстой 26

Тексты в общественном достоянии (на Kaggle указана лицензия PDDL), собраны с сайтов LitLib, Wikisource и Ilibrary. Год написания взят из файлов info.csv собрания (1825 или 1824-1825), у 28 произведений его нет. Названия папок собрания - латиницей, в записях авторы приводятся русскими именами по справочнику AUTHORS (Chekhov → «Антон Чехов»). Собрание подходит для атрибуции авторства и сравнения жанров: тексты одного автора в разных жанрах и одного жанра у разных авторов.

Архив репозитория (20 МБ) загружается по закрепленному коммиту, сверяется с контрольной суммой SHA-256 и распаковывается; тексты читаются по одному, единичный файл в cp1251 декодируется автоматически.

Параметры

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

Атрибуты

Атрибут Тип Описание
genres tuple[str] Кортеж жанров: prose, poems, publicism
authors dict[str, str] Русские имена авторов по названиям папок

Методы

download

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

Параметры:

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

Пример

Код:

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

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

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

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

Результат:

{'Наименование': 'russian_literature',
'author': 'd0rj',
'description': 'Собрание русской классической литературы RusLit',
'license': 'Общественное достояние (PDDL)',
'url': 'https://github.com/d0rj/RusLit'}

get_texts

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

Параметры:

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

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

Пример

Код:

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

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

# Отображение извлеченных текстов
for text in rl.get_texts(genre="poems", author="Пушкин", limit=1):
    print(text[:57])

Результат:

Роняет лес багряный свой убор,
Сребрит мороз увянувшее по

Имя автора в тексте

В источнике большинство файлов начинается с имени автора и названия («Александр Пушкин» и «19 ОКТЯБРЯ», «Валерий Брюсов. Бемоль», «Л.Н.Толстой», «Горький Максим»), для атрибуции авторства это утечка признака. Такие заголовки срезаются в однозначных случаях (strip_header): первая строка - имя автора записи в любой из этих форм, само по себе или с названием записи, следующая строка - название; так очищены 288 из 373 текстов. Фамилия автора остается в первых 200 символах у 8 текстов: заголовки в других формах («Антон Павлович Чехов. Палата No 6», «Горький Максим (Алексей Максимович Пешков)», «Лев Толстой. О НАУКЕ» при названии «О науке (Ответ крестьянину)») и посвящения («Посвящается графине М. Н. Толстой»). Для строгой атрибуции проверяйте начало текстов или отбрасывайте первые строки.

get_records

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

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

Пример

Код:

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

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

# Поэмы Некрасова 1860-х годов
for record in rl.get_records(author="Некрасов", year_from=1860, year_to=1870):
    print(record["title"], record["year_from"], record["year_to"], len(record["text"]))

Результат:

Дедушка 1870 1870 11408
Железная дорога 1864 1864 4952
Мороз, красный нос 1862 1864 28773