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

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

RussianLiterature(data_dir=DEFAULT_DATASET_DIR)

Собрание русской классической литературы 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), у 27 произведений его нет. Названия папок собрания - латиницей, в записях авторы приводятся русскими именами по справочнику AUTHORS (Chekhov → «Антон Чехов»). Собрание подходит для атрибуции авторства и сравнения жанров: тексты одного автора в разных жанрах и одного жанра у разных авторов.

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

Исключения:

  • SourceTypeError - data_dir, который не строка и не Path.
from ruts.datasets import RussianLiterature

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

Параметры

Параметр Тип По умолчанию Описание
data_dir str / Path DEFAULT_DATASET_DIR Путь к директории с набором данных; по умолчанию texts в DEFAULT_DATA_DIR

Атрибуты

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

Методы

download(force=False) загружает архив из сети с проверкой контрольной суммы и извлекает файлы.

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

Архив, который не удалось загрузить или который дважды не прошел проверку контрольной суммы, дает DownloadError, архив, который не удалось извлечь, - DataFileError.

check_data() проверяет, что набор данных загружен полностью, и возвращает True; незагруженный или неполный набор дает DatasetNotFoundError с командами загрузки.

get_texts(genre=None, author=None, year_from=None, year_to=None, min_len=None, max_len=None, limit=None) извлекает тексты (без заголовков) из набора данных.

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

Произведения без года не проходят фильтры по годам. Неизвестный жанр, author, который не строка, наименьший год больше наибольшего, граница длины, которая не целое число не меньше единицы, минимум больше максимума и limit, который не целое неотрицательное число, дают ParameterError; незагруженный набор данных - DatasetNotFoundError, файл, который не удалось прочитать, - DataFileError.

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 - путь к файлу.

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