Функции вычисления метрик¶
Тест Флеша-Кинкайда¶
ruts.readability_stats.calc_flesch_kincaid_grade()
Вычисление теста Флеша-Кинкайда.
Чем выше показатель, тем сложнее текст для чтения. Результатом является число лет обучения в американской системе образования, необходимых для понимания текста.
Коэффициенты по умолчанию взяты из актуальной версии проекта Plain Russian Language. Альтернативные коэффициенты для русского языка доступны через пресеты: Оборнева (0.5, 8.4, 15.59) и FKG_SIS Соловьёва, Иванова и Солнышкиной (0.36, 5.76, 11.97).
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_syllables |
int | - |
Количество слогов |
n_words |
int | - |
Количество слов |
n_sents |
int | - |
Количество предложений |
a |
int | 0.318 |
Коэффициент a |
b |
int | 14.2 |
Коэффициент b |
c |
int | 30.5 |
Коэффициент c |
Индекс удобочитаемости Флеша¶
ruts.readability_stats.calc_flesch_reading_easy()
Вычисление индекса удобочитаемости Флеша.
Чем выше показатель, тем легче текст для чтения. Значения индекса лежат в пределах от 0 до 100 и могут интерпретироваться следующим образом:
| Показатель | Уровень сложности |
|---|---|
100.0-90.0 |
5-й класс |
90.0-80.0 |
6-й класс |
80.0-70.0 |
7-й класс |
70.0-60.0 |
8-й и 9-й класс |
60.0-50.0 |
10-й и 11-й класс |
50.0-30.0 |
Университет |
30.0-0.0 |
Выпускник университета |
Коэффициенты по умолчанию принадлежат Оборневой (2005/2006, вариант А). Вариант Б тех же работ (1.52, 65.14, 206.836), которым пользуется казанская группа, доступен через пресет academic.
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_syllables |
int | - |
Количество слогов |
n_words |
int | - |
Количество слов |
n_sents |
int | - |
Количество предложений |
a |
int | 1.3 |
Коэффициент a |
b |
int | 60.1 |
Коэффициент b |
c |
int | 206.835 |
Коэффициент c |
Индекс Колман-Лиау¶
ruts.readability_stats.calc_coleman_liau_index()
Вычисление индекса Колман-Лиау.
Чем выше показатель, тем сложнее текст для чтения. Результатом является число лет обучения в американской системе образования, необходимых для понимания текста.
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_letters |
int | - |
Количество букв |
n_words |
int | - |
Количество слов |
n_sents |
int | - |
Количество предложений |
a |
int | 6.26 |
Коэффициент a |
b |
int | 0.2805 |
Коэффициент b |
c |
int | 31.04 |
Коэффициент c |
Индекс SMOG¶
ruts.readability_stats.calc_smog_index()
Вычисление индекса SMOG (Simple Measure of Gobbledygook, «Простое измерение разглагольствований»). Наиболее авторитетная метрика читабельности.
Чем выше показатель, тем сложнее текст для чтения. Результатом является число лет обучения в американской системе образования, необходимых для понимания текста.
Примечание
Коэффициенты формулы получены для порога сложного слова в 5 слогов, поэтому класс ReadabilityStats передает в функцию количество слов с числом слогов не меньше 5, а не атрибут n_complex_words объекта класса BasicStats.
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_complex |
int | - |
Количество сложных слов |
n_sents |
int | - |
Количество предложений |
a |
int | 1.1 |
Коэффициент a |
b |
int | 64.6 |
Коэффициент b |
c |
int | 0.05 |
Коэффициент c |
Автоматический индекс удобочитаемости¶
ruts.readability_stats.calc_automated_readability_index()
Вычисление автоматического индекса удобочитаемости.
Чем выше показатель, тем сложнее текст для чтения. Результатом является возраст, необходимый для понимания текста. Значения индекса могут интерпретироваться следующим образом:
| Показатель | Возраст |
|---|---|
1 |
6-7 лет |
2 |
7-8 лет |
3 |
8-9 лет |
4 |
9-10 лет |
5 |
10-11 лет |
6 |
11-12 лет |
7 |
12-13 лет |
8 |
13-14 лет |
9 |
14-15 лет |
10 |
15-16 лет |
11 |
16-17 лет |
12 |
17-18 лет |
13 |
18-24 года |
14 |
24+ года |
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_letters |
int | - |
Количество букв |
n_words |
int | - |
Количество слов |
n_sents |
int | - |
Количество предложений |
a |
int | 6.26 |
Коэффициент a |
b |
int | 0.2805 |
Коэффициент b |
c |
int | 31.04 |
Коэффициент c |
Индекс удобочитаемости LIX¶
ruts.readability_stats.calc_lix()
Вычисление индекса удобочитаемости LIX.
Чем выше показатель, тем сложнее текст для чтения. Значения индекса лежат в пределах от 0 до 100 и могут интерпретироваться следующим образом:
| Показатель | Уровень сложности |
|---|---|
4.9 и меньше |
до 4 класса включительно |
5.0-5.9 |
5-6 класс |
6.0-6.9 |
7-8 класс |
7.0-7.9 |
9-10 класс |
8.0-8.9 |
11-12 класс |
9.0-9.9 |
Университет |
Примечание
В канонической формуле длинным считается слово длиннее 6 букв, поэтому класс ReadabilityStats передает в функцию количество слов с числом букв не меньше 7, а не атрибут n_long_words объекта класса BasicStats.
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_long_words |
int | - |
Количество длинных слов |
n_words |
int | - |
Количество слов |
n_sents |
int | - |
Количество предложений |
Индекс удобочитаемости RIX¶
ruts.readability_stats.calc_rix()
Вычисление индекса удобочитаемости RIX.
Упрощенный спутник индекса LIX (1983, Anderson), не зависящий от языка. Чем выше показатель, тем сложнее текст для чтения. Значения индекса могут интерпретироваться следующим образом:
| Показатель | Уровень сложности |
|---|---|
< 0.2 |
1-й класс |
0.2-0.5 |
2-й класс |
0.5-0.8 |
3-й класс |
0.8-1.3 |
4-й класс |
1.3-1.8 |
5-й класс |
1.8-2.4 |
6-й класс |
2.4-3.0 |
7-й класс |
3.0-3.7 |
8-й класс |
3.7-4.5 |
9-й класс |
4.5-5.3 |
10-й класс |
5.3-6.2 |
11-й класс |
6.2-7.2 |
12-й класс |
> 7.2 |
Университет |
Примечание
Как и для LIX, длинным считается слово длиннее 6 букв, поэтому класс ReadabilityStats передает в функцию количество слов с числом букв не меньше 7.
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_long_words |
int | - |
Количество длинных слов |
n_sents |
int | - |
Количество предложений |
Формула Соловьёва, Иванова, Солнышкиной¶
ruts.readability_stats.calc_sis_grade()
Вычисление формулы удобочитаемости для русских академических текстов (Соловьёв, Иванов, Солнышкина, 2023).
Формула получена на корпусе Russian Academic Corpus из 154 учебников для 2-11 классов (5.7 млн токенов). Результатом является класс школы, средняя ошибка около одного класса. В отличие от теста Флеша-Кинкайда использует среднюю длину слова в буквах, а не в слогах.
Коэффициенты по умолчанию соответствуют общей формуле. Для отдельных ступеней обучения авторы приводят собственные коэффициенты, они доступны в справочнике ruts.constants.SIS_GRADE_STAGES и через метод sis_grade_by_stage:
| Ступень | a | b | c |
|---|---|---|---|
| 2-4 классы | -2.59 |
0.17 |
0.61 |
| 5-7 классы | -5.29 |
0.20 |
1.34 |
| 8-11 классы | -3.26 |
0.21 |
1.35 |
Примечание
Авторы считали среднюю длину предложения по токенам spaCy, куда попадает пунктуация, поэтому расчет по словам ruTS дает класс чуть ниже.
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_letters |
int | - |
Количество букв |
n_words |
int | - |
Количество слов |
n_sents |
int | - |
Количество предложений |
a |
int | -17.5 |
Коэффициент a (свободный член) |
b |
int | 0.56 |
Коэффициент b (при средней длине предложения) |
c |
int | 2.45 |
Коэффициент c (при средней длине слова) |
Формула Соловьёва, Иванова, Солнышкиной с частотностью¶
ruts.readability_stats.calc_sis_grade_freq()
Вычисление варианта общей формулы с четвертым признаком FREQ2 - средней частотностью слов текста по словарю Ляшевской и Шарова (Соловьёв, Иванов, Солнышкина, 2023, таблица 7): чем чаще слова, тем ниже класс. В статье значения FREQ2 лежат в пределах 200-1000, что соответствует средней частотности знаменательных слов (LexicalStats.mean_ipm_content); среднее по всем словам с учетом союзов и предлогов в разы больше. На наборе TextsByGrade формула с частотностью дает ту же корреляцию с классом, что и формула без нее (ρ Спирмена 0.76 против 0.77), как и в статье.
Коэффициенты по умолчанию соответствуют общей формуле, коэффициенты ступеней обучения из той же таблицы доступны в справочнике ruts.constants.SIS_GRADE_FREQ_STAGES и через параметр stage метода sis_grade_by_freq:
| Ступень | a | b | c | d |
|---|---|---|---|---|
| 2-4 классы | -1.21 |
0.2 |
0.56 |
-0.0025 |
| 5-7 классы | -5.18 |
0.17 |
1.35 |
-0.00043 |
| 8-11 классы | 1.3 |
0.23 |
0.88 |
-0.0035 |
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_letters |
int | - |
Количество букв |
n_words |
int | - |
Количество слов |
n_sents |
int | - |
Количество предложений |
mean_ipm |
float | - |
Средняя частотность знаменательных слов (ipm) |
a |
float | -14.46 |
Коэффициент a (свободный член) |
b |
float | 0.58 |
Коэффициент b (при средней длине предложения) |
c |
float | 2.15 |
Коэффициент c (при средней длине слова) |
d |
float | -0.0026 |
Коэффициент d (при средней частотности) |
Формула Мацковского¶
ruts.readability_stats.calc_matskovsky_index()
Вычисление формулы Мацковского - первой формулы удобочитаемости для русского языка (1976), полученной методом последовательных интервалов.
Чем выше показатель, тем сложнее текст для чтения.
Примечание
Сложным считается слово с числом слогов больше трех, поэтому класс ReadabilityStats передает в функцию количество слов с числом слогов не меньше 4.
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_complex |
int | - |
Количество сложных слов |
n_words |
int | - |
Количество слов |
n_sents |
int | - |
Количество предложений |
a |
int | 0.62 |
Коэффициент a (при средней длине предложения) |
b |
int | 0.123 |
Коэффициент b (при доле сложных слов) |
c |
int | 0.051 |
Коэффициент c (свободный член) |
Индекс Дейла-Чейла¶
ruts.readability_stats.calc_dale_chall_index()
Вычисление индекса Дейла-Чейла.
Чем выше показатель, тем сложнее текст для чтения. Результатом является число лет обучения в американской системе образования, необходимых для понимания текста.
Оригинальная формула использует список из 3000 знакомых слов, для русского языка такого свободного списка нет, поэтому применяется адаптация проекта Plain Russian Language, где вместо доли незнакомых слов используется доля сложных слов. Оригинальные коэффициенты формулы: 0.1579 и 0.0496.
Примечание
Сложным считается слово с числом слогов больше четырех, поэтому класс ReadabilityStats передает в функцию количество слов с числом слогов не меньше 5.
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_complex |
int | - |
Количество сложных слов |
n_words |
int | - |
Количество слов |
n_sents |
int | - |
Количество предложений |
a |
int | 0.552 |
Коэффициент a (при доле сложных слов) |
b |
int | 0.273 |
Коэффициент b (при средней длине предложения) |
Индекс Ганнинга¶
ruts.readability_stats.calc_gunning_fog_index()
Вычисление индекса туманности Ганнинга (1952, Gunning).
Чем выше показатель, тем сложнее текст для чтения. Результатом является число лет обучения в американской системе образования, необходимых для понимания текста. Используется в адаптации проекта Plain Russian Language. SEO-сервисы дополнительно умножают результат на 0.78, обоснование этого множителя не опубликовано.
Примечание
Сложным считается слово с числом слогов больше четырех, поэтому класс ReadabilityStats передает в функцию количество слов с числом слогов не меньше 5.
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_complex |
int | - |
Количество сложных слов |
n_words |
int | - |
Количество слов |
n_sents |
int | - |
Количество предложений |
a |
int | 0.4 |
Коэффициент a |
Перевод индекса Флеша в класс¶
ruts.readability_stats.flesch_reading_easy_to_grade()
Перевод индекса удобочитаемости Флеша в класс школы для включения в сводный класс по аналогии с text_standard библиотеки textstat:
| Индекс Флеша | Класс |
|---|---|
90-100 |
5 |
80-90 |
6 |
70-80 |
7 |
60-70 |
8.5 (8-9 классы) |
50-60 |
10 |
40-50 |
11 |
30-40 |
12 |
меньше 30 |
13 |
Значения больше 100 относятся к 5-му классу.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
flesch_reading_easy |
float | - |
Значение индекса удобочитаемости Флеша |
Сводный класс¶
ruts.readability_stats.calc_consensus_grade()
Вычисление сводного класса - медианы округлённых значений формул класса. Аналог text_standard библиотеки textstat, где вместо медианы используется мода; медиана устойчивее к выбросам отдельных формул. Значения формул округляются арифметически (половина - вверх). Индекс Флеша переводится в класс и добавляется без округления, поэтому для диапазона 60-70 он голосует за 8.5.
Класс ReadabilityStats передаёт в функцию тест Флеша-Кинкайда, индексы Колман-Лиау, SMOG, ARI, Дейла-Чейла и Ганнинга, формулу Соловьёва, Иванова, Солнышкиной и индекс Флеша.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
grades |
list[float] | - |
Значения формул класса |
flesch_reading_easy |
float | None |
Значение индекса удобочитаемости Флеша |
Класс и возраст читателя¶
ruts.readability_stats.grade_to_age()
Получение класса школы и возраста читателя по значению формулы класса. Соответствие взято из таблицы GRADE_TEXT проекта Plain Russian Language и доступно в справочнике ruts.constants.GRADE_AGE_LEVELS:
| Класс | Ступень | Возраст |
|---|---|---|
| 1-3 | 1-3-й класс | 6-8 лет |
| 4-6 | 4-6-й класс | 9-11 лет |
| 7-9 | 7-9-й класс | 12-14 лет |
| 10-11 | 10-11-й класс | 15-16 лет |
| 12-14 | 1-3-й курс вуза | 17-19 лет |
| 15-17 | 4-6-й курс вуза | 20-22 года |
| больше 17 | аспирантура | старше 22 лет |
Значение округляется арифметически, значения меньше 1 относятся к 1-3-му классу.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
grade |
float | - |
Значение формулы класса |
Время чтения¶
ruts.readability_stats.calc_reading_time()
Вычисление времени чтения текста в минутах. Норма чтения про себя для взрослого - 120-180 слов в минуту (Кузнецов и Хромов, 1991), по умолчанию используется верхняя граница. Нормы чтения вслух для начальной школы по ФГОС доступны в справочнике ruts.constants.READING_SPEED_NORMS:
| Норма | Слов в минуту |
|---|---|
adult_silent |
120-180 |
grade_1 |
25-40 |
grade_2 |
60-80 |
grade_3 |
80-100 |
grade_4 |
90-110 |
Формула:
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_words |
int | - |
Количество слов |
wpm |
int | 180 |
Скорость чтения, слов в минуту |