Формулы других языков¶
UnadaptedReadabilityStats(source, sents_extractor=None, words_extractor=None)
Формулы удобочитаемости, созданные для английского, немецкого или итальянского языка, считаются по базовым статистикам текста с опубликованными коэффициентами (Linsear Write - в форме textstat), без калибровки под язык текста. Их значения сравнивают тексты одного языка между собой, но классами обучения для другого языка не являются. Слово без слогов (число, предлог из одной согласной) в FORCAST и венских формулах считается односложным, а в Linsear Write - легким, как в textstat. Источник данных - текст, объект Doc библиотеки spaCy или готовый объект BasicStats, как у ReadabilityStats.
Исключения:
SourceTypeError- источник, который не строка, неDocи не объектBasicStats, базовые статистики не того класса, экстрактор другого типа, строка илиDocдля класса безbasic_stats_class;SourceError- источник без слов или без предложений.
Класс расширяет UnadaptedReadabilityStats ядра anyTS базовыми статистиками ruTS, которые считают слоги и буквы русских слов и по умолчанию берут русские SentsExtractor и WordsExtractor. Таблица print_stats и сообщения об ошибках - по-русски (UNADAPTED_READABILITY_STATS_DESC и CORE_MESSAGES из ruts.constants).
Формулы не откалиброваны для русского языка. Их значения годятся, чтобы сравнивать русские тексты между собой и с расчетами этих формул в других инструментах, но класса российской школы не дают: на текстах 1-го класса набора TextsByGrade медиана FORCAST - 14.9, класса Пауэрса-Самнера-Керла - 8.2, Венской формулы 1 - 9.4. Поэтому шкал прочтения у этих формул нет, describe возвращает для них None, а в сводный класс они не входят. Формулы с коэффициентами для русского языка - в ReadabilityStats.
from ruts import UnadaptedReadabilityStats
text = "Ног нет, а хожу, рта нет, а скажу: когда спать, когда вставать, когда работу начинать"
urs = UnadaptedReadabilityStats(text)
urs.print_stats()
Метрика | Значение
-----------------------------------------------------
Класс FORCAST | 13.00
Класс Linsear Write | 8.50
Класс Пауэрса-Самнера-Керла | 6.55
Индекс EFLAW Макалпайна | 21.00
Венская формула 1 (Wiener Sachtextformel) | 4.42
Венская формула 2 (Wiener Sachtextformel) | 4.25
Венская формула 3 (Wiener Sachtextformel) | 5.69
Венская формула 4 (Wiener Sachtextformel) | 5.95
Индекс Дикеса-Штайвера | 42.20
Индекс Gulpease | 65.67
Индекс Фукса | 25.00
Индекс Strain | 7.50
Формула легкости на слух (ELF) | 10.00
Индекс Уилера-Смита | 80.00
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
source |
str / Doc / BasicStats |
- | Источник данных |
sents_extractor |
SentsExtractor |
None |
Инструмент для извлечения предложений, не используется для готовых базовых статистик |
words_extractor |
WordsExtractor |
None |
Инструмент для извлечения слов, не используется для готовых базовых статистик |
Атрибуты¶
| Атрибут | Тип | Описание |
|---|---|---|
bs |
BasicStats |
Базовые статистики текста |
Готовые базовые статистики можно взять у объекта ReadabilityStats, чтобы не считать их второй раз:
from ruts import ReadabilityStats
rs = ReadabilityStats(text)
urs = UnadaptedReadabilityStats(rs.bs)
urs.bs is rs.bs, urs.forcast
(True, 13.0)
Метрики¶
Каждая метрика - свойство объекта, которое вычисляется по bs при каждом обращении, а get_stats дает их все. Сложное слово - от complex_syl_factor слогов (3), длинное - от long_word_letter_factor букв (7).
| Метрика | Язык и читатели | Диапазон | Чем больше, тем |
|---|---|---|---|
forcast |
английские технические тексты, класс | 5-20 | сложнее текст |
linsear_write |
английский, класс | от −1 | сложнее текст |
powers_sumner_kearl |
английские тексты начальной школы, класс | любой | сложнее текст |
eflaw |
английский для изучающих его как иностранный | от 1 | сложнее текст |
wiener_sachtextformel_1 ... wiener_sachtextformel_4 |
немецкие нехудожественные тексты, класс от 4 до 15 | любой | сложнее текст |
dickes_steiwer |
немецкий, без слогов | любой | легче текст |
gulpease |
итальянский, по буквам | 0-100 у большинства текстов | легче текст |
fucks |
немецкий, слоги на предложение | от 0 | сложнее текст |
strain_index |
английский | от 0 | сложнее текст |
elf |
английские тексты для чтения вслух | от 0 | сложнее текст |
wheeler_smith |
английские тексты начальной школы | от 0 | сложнее текст |
Здесь ASL - среднее число слов в предложении, ASW - среднее число слогов в слове. Функции формул импортируются из ruts.unadapted_readability_stats и считают значение по количествам:
from ruts.unadapted_readability_stats import calc_forcast, calc_gulpease
calc_forcast(n_monosyllable_words=30, n_words=150)
calc_gulpease(n_letters=550, n_words=100, n_sents=8)
17.0
58.0
FORCAST¶
calc_forcast(n_monosyllable_words, n_words)
Класс для технических текстов (Caylor и др., 1973): 20 минус десятая часть односложных слов на 150 слов, от 5 (все слова односложные) до 20; nan без слов.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_monosyllable_words |
int |
- | Количество односложных слов |
n_words |
int |
- | Количество слов |
Количество, которое не целое неотрицательное число, и число односложных слов больше числа слов дают ParameterError.
Linsear Write¶
calc_linsear_write(n_easy_words, n_hard_words, n_sents)
Класс Linsear Write в форме textstat; формула Lensear Write (O'Hayre, 1966) - другая, по односложным словам и предложениям выборки из 100 слов. Легкое слово, не длиннее двух слогов, весит 1, а сложное - 3; их сумма на предложение \(r\) больше 20 делится пополам, а иначе перед делением уменьшается на 2. Формула считается по всему тексту, а не по выборке из 100 слов; nan без предложений.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_easy_words |
int |
- | Количество слов из одного или двух слогов |
n_hard_words |
int |
- | Количество слов от трех слогов |
n_sents |
int |
- | Количество предложений |
Количество, которое не целое неотрицательное число, дает ParameterError.
Класс Пауэрса-Самнера-Керла¶
calc_powers_sumner_kearl(n_syllables, n_words, n_sents)
Пересчет формулы Флеша в класс для текстов начальной школы (Powers, Sumner и Kearl, 1958); nan без слов или предложений.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_syllables |
int |
- | Количество слогов |
n_words |
int |
- | Количество слов |
n_sents |
int |
- | Количество предложений |
Количество, которое не целое неотрицательное число, дает ParameterError.
Индекс EFLAW Макалпайна¶
calc_eflaw(n_mini_words, n_words, n_sents)
Оценка для читателей английского как иностранного (McAlpine, 2005): слова и мини-слова, из одной-трех букв (mini_word_letters), на предложение; 20 и ниже - очень легко, 30 и выше - запутанно. nan без предложений.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_mini_words |
int |
- | Количество слов из одной-трех букв |
n_words |
int |
- | Количество слов |
n_sents |
int |
- | Количество предложений |
Количество, которое не целое неотрицательное число, дает ParameterError.
Венская формула¶
calc_wiener_sachtextformel(n_complex, n_long_words, n_monosyllable_words, n_words, n_sents, variant=1)
Четыре формулы для немецких нехудожественных текстов (Bamberger и Vanecek, 1984), класс от 4 до 15, по процентам слов от трех слогов (MS), длиннее шести букв (IW) и односложных (ES) и средней длине предложения (SL); nan без слов или предложений. Вариант, который не целое число от 1 до 4, дает ParameterError.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_complex |
int |
- | Количество слов от трех слогов |
n_long_words |
int |
- | Количество слов длиннее шести букв |
n_monosyllable_words |
int |
- | Количество односложных слов |
n_words |
int |
- | Количество слов |
n_sents |
int |
- | Количество предложений |
variant |
int |
1 |
Вариант формулы, от 1 до 4 |
Количество, которое не целое неотрицательное число, дает ParameterError.
Индекс Дикеса-Штайвера¶
calc_dickes_steiwer(n_letters, n_words, n_sents, n_types)
Краткая формула для немецкого языка (Dickes и Steiwer, 1977) в том виде, в каком ее приводят Bamberger и Vanecek (1984), по буквам на слово, словам на предложение и отношению числа разных слов к числу слов (TTR), без слогов; чем больше, тем легче текст. nan без слов или предложений. TTR падает с длиной текста, поэтому значения сравнивают тексты одной длины.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_letters |
int |
- | Количество букв в словах |
n_words |
int |
- | Количество слов |
n_sents |
int |
- | Количество предложений |
n_types |
int |
- | Количество разных слов |
Количество, которое не целое неотрицательное число, дает ParameterError.
Индекс Gulpease¶
calc_gulpease(n_letters, n_words, n_sents)
Индекс для итальянского языка (Lucisano и Piemontese, 1988) по буквам, а не по слогам: около 0 у самых сложных текстов и 100 у самых легких, за этими пределами - у крайних; ниже 80 текст труден для читателя с начальным образованием, ниже 40 - для читателя со средним. nan без слов.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_letters |
int |
- | Количество букв в словах |
n_words |
int |
- | Количество слов |
n_sents |
int |
- | Количество предложений |
Количество, которое не целое неотрицательное число, дает ParameterError.
Индекс Фукса¶
calc_fucks(n_syllables, n_sents)
Характеристика стиля (Fucks, 1955): средняя длина слова в слогах, умноженная на среднюю длину предложения в словах, то есть слоги на предложение; nan без предложений.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_syllables |
int |
- | Количество слогов |
n_sents |
int |
- | Количество предложений |
Количество, которое не целое неотрицательное число, дает ParameterError.
Индекс Strain¶
calc_strain_index(n_syllables, n_sents)
Индекс (Nathaniel, 2009): число слогов в трех предложениях, деленное на 10, здесь - в среднем по всему тексту, поэтому он равен индексу Фукса, умноженному на 0.3; nan без предложений.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_syllables |
int |
- | Количество слогов |
n_sents |
int |
- | Количество предложений |
Количество, которое не целое неотрицательное число, дает ParameterError.
Формула легкости на слух¶
calc_elf(n_syllables, n_syllabic_words, n_sents)
Формула для текстов, которые читают вслух (Fang, 1966): слоги сверх одного на слово в расчете на предложение, причем слово без слогов (число) ничего не добавляет; 12 и ниже - текст легко воспринимается на слух. nan без предложений.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_syllables |
int |
- | Количество слогов |
n_syllabic_words |
int |
- | Количество слов от одного слога |
n_sents |
int |
- | Количество предложений |
Количество, которое не целое неотрицательное число, дает ParameterError.
Индекс Уилера-Смита¶
calc_wheeler_smith(n_polysyllable_words, n_sents)
Индекс для текстов начальной школы (Wheeler и Smith, 1954): средняя длина предложения, умноженная на долю слов от двух слогов и на 10, то есть десятикратное число таких слов на предложение; вместо единиц, которые в оригинале заканчивает любой конечный знак, берутся предложения. nan без предложений.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n_polysyllable_words |
int |
- | Количество слов от двух слогов |
n_sents |
int |
- | Количество предложений |
Количество, которое не целое неотрицательное число, дает ParameterError.
Методы¶
Методы get_stats, to_dataframe, print_stats и describe - из интерфейса статистик ядра anyTS; шкал у формул нет, и describe возвращает None для любой из них.
from ruts import UnadaptedReadabilityStats
text = "Ног нет, а хожу, рта нет, а скажу: когда спать, когда вставать, когда работу начинать"
urs = UnadaptedReadabilityStats(text)
urs.describe("forcast"), urs.describe("gulpease")
urs.get_stats()
(None, None)
{'forcast': 13.0,
'linsear_write': 8.5,
'powers_sumner_kearl': 6.547433333333334,
'eflaw': 21.0,
'wiener_sachtextformel_1': 4.416333333333334,
'wiener_sachtextformel_2': 4.250666666666667,
'wiener_sachtextformel_3': 5.693766666666667,
'wiener_sachtextformel_4': 5.949666666666667,
'dickes_steiwer': 42.19782322089459,
'gulpease': 65.66666666666667,
'fucks': 25.0,
'strain_index': 7.5,
'elf': 10.0,
'wheeler_smith': 80.0}