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

Тексты с метками класса

TextsByGrade(data_dir=DEFAULT_DATASET_DIR)

Набор данных текстов с метками класса проекта Plain Russian Language Ивана Бегтина. Набор содержит 68 текстов из репозитория проекта, распространяемых под лицензией CC0 1.0: 55 из списка TEXT_LIST, на которых подбирались коэффициенты формул удобочитаемости для русского языка из пресета plainrussian класса ReadabilityStats, и 13 из папок репозитория, не вошедших в список. Метка - класс школы или год обучения:

Метка Тексты Количество
1 сказки, Бианки, Гайдар, Толстой 11
3-4 Троепольский, Паустовский, Рыбаков, Короленко, Григорович 10
5-9 Кэрролл, Шукшин, Каверин, Толстой, Астафьев, Солженицын 12
10-11 Короленко, Бунин, Куприн, Платонов, Горький, Распутин, Довлатов 18
12 статья Википедии 1
15 газетная статья 1
17 нормативные и деловые документы: законы, регламенты, новости правительства 15

Метки 12-14 соответствуют 1-3 курсам вуза, 15-17 - 4-6 курсам, как в таблице grade_to_age. Абзацы текстов разделены переводом строки, жесткие переносы строк исходных файлов с lib.ru убраны.

Исключения:

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

tbg = TextsByGrade()
tbg.download()
tbg.info
{'Наименование': 'texts_by_grade',
 'url': 'https://github.com/infoculture/plainrussian',
 'description': 'Тексты с метками класса проекта Plain Russian Language',
 'author': 'Бегтин И.В.',
 'license': 'CC0 1.0'}

Параметры

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

Атрибуты

Атрибут Тип Описание
labels tuple[str] Кортеж уровней сложности текстов
info dict[str, str] Наименование набора данных и справочная информация о нем

Методы

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

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

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

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

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

Параметр Тип По умолчанию Описание
grade int None Уровень сложности текстов (1, 3-12, 15, 17)
subject str None Наименование текстов (подстрока без учета регистра и буквы ё)
min_len int None Минимальная длина текста (в символах)
max_len int None Максимальная длина текста (в символах)
limit int None Количество текстов

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

for text in tbg.get_texts(grade=1, subject="Ряба", limit=1):
    print(text[:105])
Жил себе дед да баба, у них была курочка Ряба; снесла под полом яичко - пестро, востро, костяно, мудрено!

get_records с теми же параметрами извлекает записи (с заголовками) из набора данных. Поля записи: grade - уровень сложности, subject - наименование текста, source - адрес источника (пустая строка у двух текстов, для которых адрес не опубликован: «Золотой ключик» и доклад Госсовета), text - текст, file - путь к файлу.

from ruts import ReadabilityStats

for record in tbg.get_records(grade=17, limit=3):
    print(record["subject"][:40], round(ReadabilityStats(record["text"]).consensus_grade, 1))
«Об утверждении Административного реглам 37.0
Доклад Рабочей группы Государственного с 21.5
Закон о ФКС 34.5

Проверка формул удобочитаемости

Набор используется в тестах библиотеки для проверки формул удобочитаемости: корреляция Спирмена значений формул с метками класса на всех 68 текстах должна быть не ниже 0.7, а сводный класс - не ниже 0.8. Значения при коэффициентах по умолчанию:

Формула ρ Спирмена Средняя абсолютная ошибка, классов
Тест Флеша-Кинкайда 0.80 4.1
Индекс удобочитаемости Флеша −0.80 -
Индекс Колман-Лиау 0.78 3.0
Индекс SMOG 0.82 4.1
Автоматический индекс удобочитаемости 0.80 4.0
Индекс удобочитаемости LIX 0.81 -
Индекс удобочитаемости RIX 0.78 -
Формула Соловьёва, Иванова, Солнышкиной 0.78 5.0
Формула Мацковского 0.77 -
Формула Тулдавы 0.79 -
Индекс Дейла-Чейла 0.82 3.8
Индекс Ганнинга 0.81 4.1
Сводный класс 0.81 3.7

Разбор по всем группам статистик - пресеты коэффициентов, лексика, синтаксис, морфология, связность и проверка на хрестоматии SovChLit - в ноутбуке 02_text_complexity_by_grade.ipynb.

Средний сводный класс растет с меткой: 2.9 для 1 класса, 5.8 для 3-4 классов, 6.5 для 5-9, 7.3 для 10-11 и 22.6 для документов с метками 12-17. Большая ошибка на документах ожидаема: формулы класса откалиброваны на школьных текстах, а метка 17 условна.