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