Русская классическая литература¶
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