Функции вычисления статистик¶
Деление на слоги¶
ruts.phon_stats.syllabify()
Деление слова на слоги по правилу восходящей звучности (Аванесов). Слогов в слове столько, сколько гласных; слово без гласных (предлоги в, к, с) слога не образует - это проклитика, для него возвращается пустой список. Граница слога проходит по правилам:
| Правило | Пример |
|---|---|
| одиночный согласный между гласными отходит к следующему слогу | ко-ро-ва, ра-йон |
| сочетание шумных и шумного с сонорным отходит к следующему слогу | ко-шка, се-стра, о-ткрыть, по-зна-ко-мить |
| сонорный перед шумным отходит к предыдущему слогу | кар-та, пол-ка |
| между двумя сонорными проходит граница | вол-на, кар-ман |
| й перед согласным отходит к предыдущему слогу | май-ка, вой-на |
| ь и ъ отходят к предыдущей букве | боль-шой, по-дъезд |
| каждая гласная зияния образует свой слог | а-э-ро-порт, а-ист |
Правила применяются к буквам, а не звукам, поэтому деление орфографическое, как в школьной фонетике, а не морфемное. Символы, кроме русских букв (дефис, цифры, латиница), отбрасываются.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
word |
str | - |
Слово |
Пример
from ruts.phon_stats import syllabify
syllabify("здравствуйте")
# ['здра', 'вствуй', 'те']
CV-шаблон¶
ruts.phon_stats.cv_pattern()
Получение CV-шаблона слова или слога: гласные обозначаются буквой V, согласные - C, ь и ъ пропускаются, остальные символы не учитываются.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
word |
str | - |
Слово или слог |
Открытый слог¶
ruts.phon_stats.is_open_syllable()
Проверка, является ли слог открытым - оканчивается на гласную; ь и ъ после гласной слог не закрывают.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
syllable |
str | - |
Слог |
Консонантные кластеры¶
ruts.phon_stats.calc_consonant_clusters()
Вычисление распределения консонантных кластеров по длине. Кластер - последовательность согласных внутри слова, ь и ъ не прерывают кластер; кластеры длиной 1 - одиночные согласные между гласными или на краях слова. Класс PhonStats считает по распределению долю кластеров из 3 и более согласных (p_heavy_clusters).
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] | - |
Список слов |
Зияния гласных¶
ruts.phon_stats.calc_hiatus()
Вычисление количества зияний гласных - двух и более гласных подряд внутри слова: аэропорт, аист, поэзия (о-э). Йотированные е, ё, ю, я после гласной обозначают [j] и гласный и зияния не образуют: заяц, моя, красивая, читает - иначе окончания прилагательных и глаголов давали бы четыре пятых всех зияний. Класс PhonStats делит количество зияний на количество слов (p_hiatus).
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] | - |
Список слов |
Энтропия CV-шаблонов¶
ruts.phon_stats.calc_cv_entropy()
Вычисление энтропии Шеннона распределения слов по CV-шаблону в битах: чем выше значение, тем разнообразнее фонетическая форма слов текста. Слова без гласных и согласных (числа, латиница) не учитываются; если таких слов нет вовсе, функция возвращает nan.
Формула:
где \(p_k\) - доля слов с шаблоном \(k\).
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] | - |
Список слов |
Жёсткость¶
Атрибут hardness класса PhonStats - отношение количества глухих шумных согласных к количеству гласных и сонорных. Чем выше значение, тем «жёстче» звучание текста. Не определено для текстов без гласных и сонорных.
Формула:
Индекс аллитерации¶
ruts.phon_stats.calc_alliteration()
Вычисление индекса аллитерации - отношения наблюдаемого числа окон из window_len соседних слов, в которых один и тот же согласный встречается минимум в двух словах, к ожидаемому при независимом распределении согласных по словам (сумма по всем согласным). Ожидаемое считается по частотам согласных в самом тексте, поэтому индекс показывает, сгруппированы ли повторы в соседних словах, а не общую частоту звука. Значение около 1 - повторы согласных случайны, заметно больше 1 - аллитерация. Считается по буквам без учета оглушения.
Формула для одной буквы с долей слов \(p\), содержащих её, и окном из \(w\) слов:
где \(N_w\) - количество окон; индекс равен \(\sum O / \sum E\) по всем буквам.
Предупреждение
Для текстов короче окна функция возвращает nan.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] | - |
Список слов |
window_len |
int | 3 |
Размер окна в словах |
Индекс ассонанса¶
ruts.phon_stats.calc_assonance()
Вычисление индекса ассонанса - той же величины, что индекс аллитерации, но для гласных. Считается по всем гласным буквам без учета ударения и редукции.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] | - |
Список слов |
window_len |
int | 3 |
Размер окна в словах |