Тексты с метками класса¶
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 условна.