Метрики лексического разнообразия¶
DiversityStats(source, words_extractor=None, window_len=50, mtld_threshold=0.72, mtld_min_len=10, hdd_sample_size=42, log_base=10)
Основные метрики лексического разнообразия текста, вычисляемые по его словам.
Исключения:
SourceTypeError- источник, который не строка и неDoc, экстрактор другого типа;SourceError- источник без слов;ParameterError- параметр, который отвергаетcheck_params.
Класс расширяет DiversityStats ядра anyTS: вместо списка слов он принимает текст или объект Doc библиотеки spaCy. Слова текста извлекает русский WordsExtractor или заданный экстрактор, который для Doc применяется к его тексту; без экстрактора слова Doc берутся из его токенов без знаков ударения, а части дефисного слова, разрезанного spaCy, склеиваются (во-первых - одно слово). Слова всегда приводятся к нижнему регистру. Таблица print_stats выводится с русскими заголовками и русскими описаниями метрик из ruts.constants.DIVERSITY_STATS_DESC, а сообщения об ошибках - по-русски, из ruts.constants.CORE_MESSAGES.
from ruts import DiversityStats
text = "Ног нет, а хожу, рта нет, а скажу: когда спать, когда вставать, когда работу начинать"
ds = DiversityStats(text)
ds.print_stats()
Метрика | Значение
----------------------------------------------------------------------------------
Type-Token Ratio (TTR) | 0.73
Root Type-Token Ratio (RTTR) | 2.84
Corrected Type-Token Ratio (CTTR) | 2.01
Herdan Type-Token Ratio (HTTR) | 0.89
Summer Type-Token Ratio (STTR) | 0.25
Maas Type-Token Ratio (MTTR) | 0.10
Dugast Type-Token Ratio (DTTR) | 10.27
Moving Average Type-Token Ratio (MATTR) | 0.73
Mean Segmental Type-Token Ratio (MSTTR) | 0.73
Measure of Textual Lexical Diversity (MTLD) | 15.00
Moving Average Measure of Textual Lexical Diversity (MA-MTLD) | 12.00
Moving Average Measure of Textual Lexical Diversity with Wrap (MTLD-W) | 13.25
Hypergeometric Distribution D (HD-D) | nan
Индекс Симпсона (D) | 0.05
Обратный индекс Симпсона (1/D) | 21.00
Индекс Джини-Симпсона (1-D) | 0.95
Гапакс-индекс (Honoré's R) | 992.95
Характеристика Юла (Yule's K) | 444.44
Обратная характеристика Юла (Yule's I) | 8.64
Мера Хердана (Herdan's Vm) | 0.14
Мера Сишела (Sichel's S) | 0.18
Мера Мишеа (Michéa's M) | 5.50
Мера Брюне (Brunet's W) | 6.01
Мера Дюга (Dugast's k) | 14.78
Мера Баайена (Baayen's P) | 0.53
Мера Орлова (Orlov's Z, слов) | nan
Доля гапаксов | 0.73
Показатель α₂ | 0.50
Энтропия Шеннона (бит) | 3.32
Выравненность | 0.96
Перплексия | 10.01
Наклон закона Ципфа (α) | 0.49
Показатель закона Хипса (β) | 0.84
Взрывность частых лексем | nan
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
source |
str / Doc |
- | Источник данных |
words_extractor |
WordsExtractor |
None |
Инструмент для извлечения слов; для Doc применяется к его тексту |
window_len |
int |
50 |
Размер окна для MATTR и сегмента для MSTTR (MATTR_WINDOW_LEN) |
mtld_threshold |
float |
0.72 |
Порог TTR для MTLD, MA-MTLD и MTLD-W (MTLD_TTR_THRESHOLD) |
mtld_min_len |
int |
10 |
Минимальная длина фактора для MTLD, MA-MTLD и MTLD-W (MTLD_MIN_LEN) |
hdd_sample_size |
int |
42 |
Размер выборки для HD-D (HDD_SAMPLE_SIZE) |
log_base |
float |
10 |
Основание логарифма для метрик Summer, Maas и Dugast (DIVERSITY_LOG_BASE) |
Константы умолчаний в скобках, здесь и в карточках, - из anyts.constants.
Объект хранит слова в words, кортежем, и пять параметров под их именами, изменяемые у объекта. frequency_spectrum - спектр частот слов (calc_frequency_spectrum), а honore_r - псевдоним hapax_index.
check_params(window_len=50, mtld_threshold=0.72, mtld_min_len=10, hdd_sample_size=42, log_base=10, *, messages=CORE_MESSAGES)
Проверка параметров метрик: window_len или hdd_sample_size, которые не целое число не меньше единицы, mtld_min_len, который не целое неотрицательное число, mtld_threshold, который не число в интервале (0, 1), и log_base, который не конечное число больше 1, дают ParameterError. Проверка выполняется до извлечения слов, поэтому о неверном параметре она сообщает раньше, чем о пустом тексте.
Соглашения¶
Часть метрик зависит от соглашений, которые в разных библиотеках различаются. Все они, кроме сравнения с порогом MTLD, вынесены в параметры класса:
| Параметр | По умолчанию | Другие библиотеки |
|---|---|---|
| Основание логарифма для Summer, Maas, Dugast's U и Dugast's k | 10 |
LexicalRichness, textcomplexity и zipfR - натуральный |
| Окно MATTR и сегмент MSTTR | 50 |
quanteda и koRpus - 100 |
| Порог TTR для MTLD | 0.72 |
в литературе 0.66-0.75 |
| Сравнение с порогом MTLD | фактор закрывается при TTR ≤ 0.72 (McCarthy & Jarvis, 2010) | lexical-diversity и TAALED - строгое <; значения расходятся, когда TTR попадает ровно в порог |
| Минимальная длина фактора MTLD | 10 |
koRpus - только в MTLD-MA, с отбрасыванием более коротких факторов вместо их продления; LexicalRichness и textcomplexity - не применяется |
| Размер выборки HD-D | 42 |
в литературе 35-50 |
По Zenker и Kyle (2021) MATTR, MTLD и HD-D стабильны на текстах от 50-200 слов, MTLD-W, MA-MTLD и Maas нестабильны на коротких текстах, а семейство TTR не стабилизируется вовсе. Тексты разной длины сравниваются оконным расчетом с доверительными интервалами.
Метрики¶
Каждая метрика - свойство объекта, которое вычисляется при каждом обращении функцией из ее карточки с параметрами объекта, а get_stats дает их все.
| Метрика | Что измеряет | Диапазон | Чем больше, тем |
|---|---|---|---|
ttr |
Доля лексем среди слов | 0-1 | богаче словарь |
rttr |
Лексемы относительно квадратного корня из числа слов | от 0 | богаче словарь |
cttr |
Лексемы относительно квадратного корня из удвоенного числа слов | от 0 | богаче словарь |
httr |
Лексемы относительно слов в логарифмах | 0-1 | богаче словарь |
sttr |
Лексемы относительно слов в двойных логарифмах | до 1, nan для одной лексемы или текста не длиннее основания |
богаче словарь |
mttr |
Повторяемость слов в логарифмах | от 0 | беднее словарь |
dttr |
Обратная величина к метрике Maas | от 0, inf без повторяющихся слов |
богаче словарь |
mattr |
Средний TTR скользящего окна | 0-1 | богаче словарь |
msttr |
Средний TTR последовательных сегментов | 0-1 | богаче словарь |
mtld |
Слов на фактор - отрезок, на котором TTR опускается до порога | больше 0, inf без повторяющихся слов |
богаче словарь |
mamtld |
Средняя длина факторов, начинающихся с каждого слова | до числа слов, nan, если ни один фактор не завершен |
богаче словарь |
mtldw |
Средняя длина факторов, начинающихся с каждого слова, с заворотом текста | до числа слов, nan, если ни один фактор не завершен |
богаче словарь |
hdd |
Ожидаемый TTR случайной выборки | 0-1, nan для текста короче 50 слов или размера выборки |
богаче словарь |
simpson_index |
Вероятность того, что два слова - одна лексема | 0-1, nan для текста короче двух слов |
беднее словарь |
inverse_simpson_index |
Эффективное число лексем второго порядка | от 1, inf без повторяющихся слов, nan для текста короче двух слов |
богаче словарь |
gini_simpson_index |
Вероятность того, что два слова - разные лексемы | 0-1, nan для текста короче двух слов |
богаче словарь |
hapax_index |
Доля гапаксов среди лексем относительно длины текста | от 0, inf без повторяющихся слов, nan для текста короче двух слов |
богаче словарь |
yule_k |
Повторяемость слов | 0-10 000, nan для текста короче двух слов |
беднее словарь |
yule_i |
Величина, обратная Yule's K | больше 0, inf без повторяющихся слов, nan для текста короче двух слов |
богаче словарь |
herdan_vm |
Неравномерность частот | 0-1, nan для текста короче двух слов |
беднее словарь |
sichel_s |
Доля дислегоменов среди лексем | 0-1 | больше лексем, встретившихся дважды |
michea_m |
Лексем на дислегомен | от 1, inf без дислегоменов |
меньше лексем, встретившихся дважды |
brunet_w |
Слова относительно лексем | от 1 до числа слов | беднее словарь |
dugast_k |
Лексемы относительно слов в логарифмах | от 0, nan для текста не длиннее основания |
богаче словарь |
baayen_p |
Доля гапаксов среди слов | 0-1 | быстрее растет словарь |
orlov_z |
Длина текста в словах, при которой закон Ципфа лучше всего описывает словарь | больше 0, nan без решения, inf за пределами float |
богаче словарь |
hapax_ratio |
Доля гапаксов среди лексем | 0-1 | больше лексем, встретившихся один раз |
alpha2 |
Форма нижней части спектра частот | до 1, nan без гапаксов |
больше гапаксов относительно дислегоменов |
entropy |
Информация на слово в битах | от 0 | богаче словарь |
evenness |
Энтропия относительно ее максимума | 0-1, nan для одной лексемы |
равномернее частоты |
perplexity |
Эффективное число лексем | от 1 до числа лексем | богаче словарь |
zipf_alpha |
Падение частоты с рангом | от 0, nan для одной лексемы |
быстрее падают частоты |
heaps_beta |
Рост словаря с длиной текста | от 0, nan для текста короче двух слов |
быстрее растет словарь |
burstiness |
Средняя взрывность лексем с пятью и более вхождениями | от -1 до 1, nan без таких лексем |
слова идут всплесками |
Функции и именованные кортежи карточек импортируются из ruts.diversity_stats.
Type-Token Ratio (TTR)¶
calc_ttr(text)
Самая простая мера лексического разнообразия, без поправки на длину текста.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Root Type-Token Ratio (RTTR)¶
calc_rttr(text)
Модификация метрики TTR (Guiraud, 1960).
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Corrected Type-Token Ratio (CTTR)¶
calc_cttr(text)
Модификация метрики TTR (Carroll, 1964).
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Herdan Type-Token Ratio (HTTR)¶
calc_httr(text)
Логарифмическая модификация метрики TTR (Herdan, 1960).
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Summer Type-Token Ratio (STTR)¶
calc_sttr(text, base=10)
Логарифмическая модификация метрики TTR (Summer, 1966). Значение зависит от основания логарифма (см. соглашения). Оно равно nan для текста из одной лексемы, где числитель не определен, и для текста не длиннее основания (\(\log \log N \le 0\)), в том числе для таких окон calc_windowed.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
base |
float |
10 |
Основание логарифма (DIVERSITY_LOG_BASE) |
base, который не конечное число больше 1, дает ParameterError.
Maas Type-Token Ratio (MTTR)¶
calc_mttr(text, base=10)
Логарифмическая модификация метрики TTR (Maas, 1972). Значение зависит от основания логарифма (см. соглашения).
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
base |
float |
10 |
Основание логарифма (DIVERSITY_LOG_BASE) |
base, который не конечное число больше 1, дает ParameterError.
Dugast Type-Token Ratio (DTTR)¶
calc_dttr(text, base=10)
Логарифмическая модификация метрики TTR (Dugast, 1978), обратная величина к метрике Maas. Значение зависит от основания логарифма (см. соглашения). У текста без повторяющихся слов значение бесконечно.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
base |
float |
10 |
Основание логарифма (DIVERSITY_LOG_BASE) |
base, который не конечное число больше 1, дает ParameterError.
Moving Average Type-Token Ratio (MATTR)¶
calc_mattr(text, window_len=50)
Модификация метрики TTR со скользящей средней (Covington & McFall, 2010), не зависящая от длины текста: окно фиксированного размера скользит по тексту, и TTR всех окон усредняется. Для текстов короче окна возвращается TTR всего текста.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
window_len |
int |
50 |
Размер окна (MATTR_WINDOW_LEN) |
window_len, который не целое число не меньше единицы, дает ParameterError.
Mean Segmental Type-Token Ratio (MSTTR)¶
calc_msttr(text, segment_len=50)
Модификация метрики TTR с сегментированием (Johnson, 1944), не зависящая от длины текста: текст делится на сегменты фиксированного размера, и TTR всех сегментов усредняется; неполный последний сегмент отбрасывается. Для текстов короче сегмента возвращается TTR всего текста.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
segment_len |
int |
50 |
Размер сегмента (MATTR_WINDOW_LEN) |
segment_len, который не целое число не меньше единицы, дает ParameterError.
Measure of Textual Lexical Diversity (MTLD)¶
calc_mtld(text, min_len=10, threshold=0.72)
Модификация метрики MSTTR (McCarthy, 2005), не зависящая от длины текста: количество слов, деленное на количество факторов - отрезков, на которых TTR опускается до порога (TTR <= threshold, см. соглашения). Незавершенный последний фактор учитывается пропорционально тому, насколько его TTR приблизился к порогу. Значение - среднее двух проходов, в прямом и обратном порядке (McCarthy & Jarvis, 2010). Минимальная длина фактора нестандартна (lexical-diversity Кайла), а min_len, равный 0, ее отключает. Если ни один фактор не завершен и TTR не опускается ниже 1, значение равно бесконечности.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
min_len |
int |
10 |
Минимальная длина фактора (MTLD_MIN_LEN) |
threshold |
float |
0.72 |
Порог TTR для завершения фактора (MTLD_TTR_THRESHOLD) |
min_len, который не целое неотрицательное число, и threshold, который не число в интервале (0, 1), дают ParameterError.
Moving Average Measure of Textual Lexical Diversity (MA-MTLD)¶
calc_mamtld(text, min_len=10, threshold=0.72, step=1)
Модификация метрики MTLD со скользящим окном по образцу MTLD-MA из koRpus: фактор начинается с каждой позиции текста, а значение - средняя длина завершенных факторов по двум проходам, в прямом и обратном порядке. koRpus делает только прямой проход, закрывает фактор при TTR строго ниже порога и отбрасывает факторы короче минимальной длины, а не продлевает их. С шагом step, равным k, фактор начинается с каждой k-й позиции от каждого из концов текста, как MTLDMA.steps в koRpus, и вычисляются только эти факторы: шаг 10 в несколько раз быстрее. Если ни один фактор не завершен, значение равно nan. Метрика нестабильна на коротких текстах.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
min_len |
int |
10 |
Минимальная длина фактора (MTLD_MIN_LEN) |
threshold |
float |
0.72 |
Порог TTR для завершения фактора (MTLD_TTR_THRESHOLD) |
step |
int |
1 |
Расстояние между началами факторов |
min_len, который не целое неотрицательное число, threshold, который не число в интервале (0, 1), и step, который не целое число больше 0, дают ParameterError.
MTLD со скользящим окном и заворотом текста (MTLD-W)¶
calc_mtldw(text, min_len=10, threshold=0.72)
Модификация метрики MA-MTLD по образцу mtld_ma_wrap из lexical-diversity и TAALED: факторы, не завершенные до конца текста, продолжаются с его начала, поэтому все позиции получают равный вес. Фактор не может быть длиннее текста. Если ни один фактор не завершен, потому что текст короче min_len или TTR не опускается до порога ни с одного начала, значение равно nan. Метрика нестабильна на текстах короче 100 слов.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
min_len |
int |
10 |
Минимальная длина фактора (MTLD_MIN_LEN) |
threshold |
float |
0.72 |
Порог TTR для завершения фактора (MTLD_TTR_THRESHOLD) |
min_len, который не целое неотрицательное число, и threshold, который не число в интервале (0, 1), дают ParameterError.
Hypergeometric Distribution D (HD-D)¶
calc_hdd(text, sample_size=42)
Альтернатива vocd-D (McCarthy & Jarvis, 2010): точный ожидаемый TTR случайной выборки из sample_size слов, без отбора выборок. Гипергеометрическое распределение дает вероятность того, что каждая лексема попадет в выборку хотя бы раз; HD-D - сумма этих вероятностей, деленная на размер выборки. Для текстов короче 50 слов или короче размера выборки метрика не определена, и значение равно nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
sample_size |
int |
42 |
Размер выборки в словах (HDD_SAMPLE_SIZE) |
sample_size, который не целое число не меньше единицы, дает ParameterError.
Индекс Симпсона (D)¶
calc_simpson_index(text)
Вероятность того, что два слова, случайно извлеченные из текста без возвращения, окажутся одной лексемой; \(n\) - количество вхождений лексемы в текст. Для текстов короче двух слов индекс не определен, и значение равно nan; то же относится к обратному индексу Симпсона и индексу Джини-Симпсона.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Обратный индекс Симпсона (1/D)¶
calc_inverse_simpson_index(text)
Оценка числа Хилла второго порядка (\(1/\sum_k p_k^2\)) по парам слов, извлеченным без возвращения. Если все слова текста уникальны, индекс Симпсона равен 0, а обратный индекс - бесконечности.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Индекс Джини-Симпсона (1-D)¶
calc_gini_simpson_index(text)
Вероятность того, что два случайно выбранных слова текста окажутся разными.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Гапакс-индекс (Honoré's R)¶
calc_hapax_index(text)
Гапакс (греч. ἅπαξ λεγόμενον - «только раз названное») - слово, встретившееся в корпусе только один раз: baciyelmo, словечко Санчо Пансы для цирюльничьего тазика, который Дон Кихот принимает за шлем, - гапакс Сервантеса (глава 44 первой части «Дон Кихота»). Индекс совпадает с мерой Оноре (1979) и использует натуральный логарифм. Если все слова текста - гапаксы, индекс равен бесконечности; для текстов короче двух слов он не определен, и значение равно nan. calc_honore_r - та же функция.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Русский пример: боливар («шляпа определённого фасона») - гапакс языка Пушкина: слово встречается только в знаменитом месте из «Евгения Онегина».
Спектр частот¶
calc_frequency_spectrum(text)
Количество лексем \(V_i\), встретившихся в тексте ровно \(i\) раз, справочником по частоте \(i\) в порядке возрастания. Из него по формулам Tweedie и Baayen (1998) вычисляются гапакс-индекс, характеристики Юла K и I, меры Хердана Vm, Сишела S, Мишеа M и Баайена P, доля гапаксов и показатель α₂.
Обозначения: \(N\) - количество слов, \(V\) - количество лексем, \(V_i\) - количество лексем с частотой \(i\), \(V_1\) - гапаксы, \(V_2\) - дислегомены, \(p_k\) - относительная частота лексемы.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Характеристика Юла (Yule's K)¶
calc_yule_k(text)
Характеристика Юла (Yule, 1944) - одна из немногих мер, теоретически не зависящих от длины текста (Tweedie & Baayen, 1998); на практике она сходится с ростом текста. Пропорциональна индексу Симпсона: \(K \approx 10^4 \cdot D\). Для текстов короче двух слов значение равно nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Обратная характеристика Юла (Yule's I)¶
calc_yule_i(text)
Обратная характеристика Юла. Если все слова текста уникальны, значение равно бесконечности; для текстов короче двух слов - nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Мера Хердана (Herdan's Vm)¶
calc_herdan_vm(text)
Мера Хердана (Herdan, 1955), теоретически не зависящая от длины текста. Для текстов короче двух слов значение равно nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Мера Сишела (Sichel's S)¶
calc_sichel_s(text)
Мера Сишела (Sichel, 1975) - доля дислегоменов, лексем с частотой 2, среди всех лексем. Стабильна на текстах разной длины.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Мера Мишеа (Michéa's M)¶
calc_michea_m(text)
Мера Мишеа (Michéa, 1969) - обратная величина к мере Сишела. Если в тексте нет дислегоменов, значение равно бесконечности.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Мера Брюне (Brunet's W)¶
calc_brunet_w(text, a=0.172)
Мера Брюне (Brunet, 1978). Значения для текстов обычно лежат в пределах 10-20.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
a |
float |
0.172 |
Показатель степени (BRUNET_W_EXPONENT) |
a, который не конечное число, дает ParameterError.
Мера Дюга (Dugast's k)¶
calc_dugast_k(text, base=10)
Мера Дюга (Dugast, 1979), не путать с Dugast's U - метрикой DTTR. Значение зависит от основания логарифма. Для текстов не длиннее основания (\(\log N \le 1\)) мера не определена, и значение равно nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
base |
float |
10 |
Основание логарифма (DIVERSITY_LOG_BASE) |
base, который не конечное число больше 1, дает ParameterError.
Мера Баайена (Baayen's P)¶
calc_baayen_p(text)
Мера Баайена (Baayen, 1991) - доля гапаксов среди всех слов текста. Равна наклону кривой роста словаря в конце текста: вероятности того, что следующее слово окажется новым (Evert, 2004).
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Мера Орлова (Orlov's Z)¶
calc_orlov_z(text)
Длина текста, при которой закон Ципфа лучше всего описывает словарь (Орлов, 1983): решение \(Z\) для \(N\) слов, \(V\) лексем и доли \(p\) самой частой лексемы. У правой части есть минимум по \(Z\), и \(Z\) - решение больше точки минимума; значение равно nan, если \(V\) не больше этого минимума или каждое слово - отдельная лексема, и inf, если \(V\) так близко к \(N\), что \(Z\) выходит за пределы float. Вместе с Yule's K мера Z лучше всех мер, которые сравнивали Tweedie и Baayen, различала авторов. На тексте короче примерно десяти тысяч слов Z неустойчива и растет с длиной, а ее значения различаются на порядки: сравнивают тексты одной длины или ее логарифм.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
from ruts.diversity_stats import calc_orlov_z
words = "снесла курочка яичко не простое а золотое дед бил бил не разбил баба била била не разбила".split()
round(calc_orlov_z(words), 2)
279.56
Доля гапаксов¶
calc_hapax_ratio(text)
Доля гапаксов среди всех лексем текста.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Показатель α₂¶
calc_alpha2(text)
Оценка параметра Ципфа-Мандельброта по нижней части спектра частот (Evert, 2004). Если в тексте нет гапаксов, значение равно nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Энтропия Шеннона¶
calc_entropy(text)
Энтропия распределения лексем в битах. Число Хилла первого порядка равно \(2^H\) (перплексия), нулевого - \(V\); число второго порядка оценивает обратный индекс Симпсона.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Выравненность¶
calc_evenness(text)
Выравненность Пиелу - отношение энтропии Шеннона к ее максимуму при данном количестве лексем. Для текстов из одной лексемы она не определена, и значение равно nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Перплексия¶
calc_perplexity(text)
Число Хилла первого порядка, эффективное количество лексем текста.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Наклон закона Ципфа¶
calc_zipf_alpha(text)
Показатель \(\alpha\) закона Ципфа \(f(r) \propto r^{-\alpha}\), где \(r\) - ранг лексемы по частоте, оцененный линейной регрессией логарифма частоты по логарифму ранга. Для естественных текстов \(\alpha\) близка к 1. Оценка по рангам методом наименьших квадратов смещена, метод максимального правдоподобия точнее. Для текстов из одной лексемы значение равно nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Подгонка закона Ципфа-Мандельброта¶
fit_zipf_mandelbrot(text)
Подгонка закона Ципфа-Мандельброта \(f(r) = C / (r + q)^s\) к распределению частот по рангам. При \(q = 0\) это закон Ципфа с показателем \(s\); сдвиг \(q\) передает выполаживание кривой на самых частых словах. Параметры подбираются методом наименьших квадратов в логарифмических координатах при \(q \ge 0\), \(s \ge 0\); лексемы с нулевой частотой в счетчике не учитываются. Результат - именованный кортеж ZipfMandelbrot с полями c, q, s и r2 - коэффициентом детерминации подгонки в логарифмических координатах. Все поля равны nan для текстов из менее чем трех лексем, при одинаковых частотах всех лексем или при расходящейся подгонке. На коротких текстах параметры неустойчивы: закон описывает большие корпуса.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] / Counter |
- | Список слов или счетчик их частот |
Счетчик, слова которого не строки или частоты не числа, дает SourceTypeError, а отрицательная, nan или бесконечная частота - SourceError (check_counts).
Визуализатор закона Ципфа строит эту подгонку при show_fit=True.
from ruts.diversity_stats import fit_zipf_mandelbrot
# частоты 12, 6, 4, 3 в точности следуют закону f = 12 / r
words = ["а"] * 12 + ["б"] * 6 + ["в"] * 4 + ["г"] * 3
fit = fit_zipf_mandelbrot(words)
round(fit.c, 3), round(fit.q, 3), round(fit.s, 3), round(fit.r2, 3)
(12.001, 0.0, 1.0, 1.0)
Показатель закона Хипса¶
calc_heaps_beta(text)
Показатель \(\beta\) закона Хипса \(V(N) = K \cdot N^{\beta}\) роста словаря с ростом длины текста, оцененный линейной регрессией логарифма размера словаря по логарифму длины текста вдоль кривой роста. На корпусах в миллионы слов \(\beta\) лежит в пределах 0.4-0.6, на отдельном тексте - в пределах 0.6-0.9, поэтому значения сравнимы только между текстами близкой длины. Значение зависит от порядка слов и требует от нескольких сотен слов. Для текстов короче двух слов значение равно nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
vocabulary_growth(text)
Кривая роста словаря списка слов: размер словаря после каждого слова текста.
fit_heaps(text)
Подгонка закона Хипса по кривой роста словаря списка слов, как в calc_heaps_beta. Возвращает именованный кортеж HeapsFit с параметрами k, beta и коэффициентом детерминации r2, все nan для текстов короче двух слов; r2 равен nan и для текста из одной лексемы.
По fit_heaps строится график закона Хипса.
Взрывность¶
calc_burstiness(text, min_freq=5)
Насколько лексема встречается всплесками, а не равномерно по тексту, - взрывность Kim и Jo, которая поправляет взрывность Goh и Barabási на конечное число событий \(n\), усредненная по лексемам, встретившимся не меньше min_freq раз (BURSTINESS_MIN_FREQ). Для \(n\) вхождений лексемы \(r\) - коэффициент вариации их \(n\) интервалов, включая интервал от последнего вхождения до первого через конец текста. Значение равно −1 для вхождений через равные интервалы, включая интервал через конец (a x a x a x a x a x - −1, a x a x a x a x a - около −0.69), близко к 0 для редкой лексемы в случайных местах и доходит до 1 для вхождений всплесками; без таких лексем значение - nan. На коротком тексте или окне лексемы из min_freq вхождений - в основном служебные слова, а значение растет с длиной текста.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
min_freq |
int |
5 |
Наименьшее количество вхождений измеряемой лексемы |
min_freq, который не целое число не меньше 2, дает ParameterError.
from ruts.diversity_stats import calc_burstiness
(
calc_burstiness("да нет да нет да нет да нет да нет".split()),
calc_burstiness("да да да да да нет нет нет нет нет".split()),
)
(-1.0, 0.18350341907227388)
Оконный расчет¶
calc_windowed(text, func, window_len=100, step=None, confidence=0.95, *, messages=CORE_MESSAGES)
Значения метрики по последовательным окнам одинаковой длины дают их среднее, выборочное стандартное отклонение и доверительный интервал среднего по распределению Стьюдента. Стандартный способ сравнения текстов разной длины; стандартизированный TTR Кубата и Милички (не STTR Summer) - оконный TTR с окном 1000 слов и 95% интервалом. Текст короче окна - единственное окно; окна со значением nan не учитываются. Если окон с определенным значением меньше двух, отклонение и интервал равны nan, а если таких окон нет - и среднее. Метрика, бесконечная хотя бы в одном окне (например, обратный индекс Симпсона на окне из уникальных слов), делает среднее бесконечным, а отклонение и интервал - nan. Результат - именованный кортеж WindowStats с полями mean, std, lower, upper и n_windows - числом окон с определенным значением.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
func |
Callable |
- | Функция вычисления метрики по списку слов |
window_len |
int |
100 |
Размер окна |
step |
int |
None |
Шаг окна; по умолчанию равен размеру окна, и окна не пересекаются |
confidence |
float |
0.95 |
Уровень доверия |
messages |
dict[str, str] |
CORE_MESSAGES |
Сообщения об ошибках по ключам |
func, который нельзя вызвать, дает SourceTypeError; window_len или step, которые не целое число не меньше единицы, и confidence, который не число в интервале (0, 1), дают ParameterError.
Каждая функция проверяет слова с помощью check_words: text, который является строкой, Doc, итератором, множеством или таблицей или слова которого не строки, дает SourceTypeError; fit_zipf_mandelbrot принимает и счетчик.
Методы¶
windowed(stat, window_len=100, step=None, confidence=0.95) вычисляет метрику из get_stats по ее названию в окнах: calc_windowed с функцией метрики и параметрами объекта. Остальные аргументы, результат и ошибки - как у calc_windowed; неизвестное название дает UnknownStatError.
ds.windowed("ttr", window_len=5)
ds.windowed("ttr", window_len=5, step=2).n_windows
WindowStats(mean=0.9333333333333332, std=0.11547005383792512, lower=0.6464898180167025, upper=1.220176848649964, n_windows=3)
6
get_stats() возвращает справочник вычисленных метрик из stats_desc.
print_stats() выводит таблицу вычисленных метрик с их описаниями из stats_desc под заголовками из stats_headers.
ds.get_stats()
{'ttr': 0.7333333333333333,
'rttr': 2.840187787218772,
'cttr': 2.008316044185609,
'httr': 0.8854692840710255,
'sttr': 0.2500605793160848,
'mttr': 0.09738250756232528,
'dttr': 10.268784661968118,
'mattr': 0.7333333333333333,
'msttr': 0.7333333333333333,
'mtld': 15.0,
'mamtld': 12.0,
'mtldw': 13.25,
'hdd': nan,
'simpson_index': 0.047619047619047616,
'inverse_simpson_index': 21.0,
'gini_simpson_index': 0.9523809523809523,
'hapax_index': 992.9517404041437,
'yule_k': 444.44444444444446,
'yule_i': 8.642857142857142,
'herdan_vm': 0.1421338109037403,
'sichel_s': 0.18181818181818182,
'michea_m': 5.5,
'brunet_w': 6.00637847898991,
'dugast_k': 14.783895126869226,
'baayen_p': 0.5333333333333333,
'orlov_z': nan,
'hapax_ratio': 0.7272727272727273,
'alpha2': 0.5,
'entropy': 3.3232314287976203,
'evenness': 0.9606293157795304,
'perplexity': 10.009038104159247,
'zipf_alpha': 0.4884512334695912,
'heaps_beta': 0.8366147342060046,
'burstiness': nan}
Остальные методы - to_dataframe и describe - из интерфейса статистик ядра anyTS; шкал у метрик лексического разнообразия нет, поэтому describe для метрик get_stats возвращает None.