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

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

ruts.datasets.TextsByGrade

Описание

Модуль для работы с набором данных текстов с метками класса проекта 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 убраны.

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

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

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

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

Параметры

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

Атрибуты

Атрибут Тип Описание
labels tuple[str] Кортеж уровней сложности текстов

Методы

download

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

Параметры:

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

Пример

Код:

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

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

# Загрузка набора данных
tbg.download(force=True)

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

Результат:

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

get_texts

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

Параметры:

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

Пример

Код:

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

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

# Отображение извлеченных текстов
for i in tbg.get_texts(grade=1, subject="Ряба", limit=1):
    print(i[:105])

Результат:

Жил себе дед да баба, у них была курочка Ряба; снесла под полом яичко - пестро, востро, костяно, мудрено!

get_records

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

Параметры:

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

Пример

Код:

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

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

# Сводный класс для текстов 17 уровня
for record in tbg.get_records(grade=17, limit=3):
    print(record["subject"][:40], round(ReadabilityStats(record["text"]).consensus_grade, 1))

Результат:

«Об утверждении Административного реглам 27.0
Доклад Рабочей группы Государственного с 21.5
Закон о ФКС 34.5