Перейти к содержанию

Фоностатистики

ruts.phon_stats.PhonStats

Описание

Модуль для вычисления фоностатистик текста: долей классов звуков, консонантных кластеров и зияний, энтропии CV-шаблонов, «жёсткости», индексов аллитерации и ассонанса, а также статистик слогов. В качестве источника данных может использоваться как непосредственно текст, так и объект класса Doc библиотеки spaCy.

Статистики считаются по буквам без учета оглушения, редукции и ударения. Классы букв заданы константами ruts.constants:

Класс Буквы Константа
Гласные а, е, и, о, у, ы, э, ю, я, ё RU_VOWELS
Сонорные согласные л, м, н, р, й RU_CONSONANTS_SONOR, RU_CONSONANTS_YET
Звонкие шумные согласные б, в, г, д, ж, з RU_CONSONANTS_HIGH
Глухие шумные согласные к, п, с, т, ф, х, ц, ч, ш, щ RU_CONSONANTS_LOW
Знаки ь, ъ - не являются звуками и не учитываются в долях RU_MARKS

Слова делятся на слоги по правилу восходящей звучности (Аванесов), см. функцию syllabify.

Примечание

Вычисление статистик происходит в момент инициализации объекта класса PhonStats.

Параметры

Параметр Тип По умолчанию Описание
source str/Doc - Источник данных (строка или объект Doc)
words_extractor WordsExtractor None Инструмент для извлечения слов
window_len int 3 Размер окна в словах для аллитерации и ассонанса

Атрибуты

Атрибут Тип Описание
words tuple[str] Кортеж извлеченных слов в нижнем регистре
syllables tuple[tuple[str, ...], ...] Кортеж слогов каждого слова
n_vowels int Количество гласных
n_consonants int Количество согласных
n_sonorants int Количество сонорных согласных
n_voiced int Количество звонких шумных согласных
n_voiceless int Количество глухих шумных согласных
n_marks int Количество мягких и твердых знаков
c_clusters dict[int, int] Распределение консонантных кластеров по длине
c_syllable_patterns dict[str, int] Распределение слогов по CV-шаблону
p_vowels float Доля гласных среди звуков
p_sonorants float Доля сонорных согласных среди звуков
p_voiced float Доля звонких шумных согласных среди звуков
p_voiceless float Доля глухих шумных согласных среди звуков
consonant_vowel_ratio float Отношение согласных к гласным
p_heavy_clusters float Доля кластеров из 3 и более согласных
p_hiatus float Зияний гласных на слово
cv_entropy float Энтропия CV-шаблонов слов в битах
hardness float Жёсткость - отношение глухих шумных к гласным и сонорным
alliteration float Индекс аллитерации
assonance float Индекс ассонанса
p_open_syllables float Доля открытых слогов
mean_syllable_len float Средняя длина слога в буквах

Примечание

Каждую статистику можно вычислить отдельно, выполнив соответствующую функцию. Подробную информацию о фоностатистиках и функциях, используемых для их вычисления, можно узнать в соответствующем разделе.

Методы

get_stats

Возвращает справочник с вычисленными фоностатистиками текста.

Пример

Код:

# Загрузка библиотек
from ruts import PhonStats

# Подготовка данных
text = "Ног нет, а хожу, рта нет, а скажу: когда спать, когда вставать, когда работу начинать"

# Вычисление статистик
ps = PhonStats(text)
ps.get_stats()

Результат:

{'p_vowels': 0.4032258064516129,
'p_sonorants': 0.11290322580645161,
'p_voiced': 0.1935483870967742,
'p_voiceless': 0.2903225806451613,
'consonant_vowel_ratio': 1.48,
'p_heavy_clusters': 0.034482758620689655,
'p_hiatus': 0.0,
'cv_entropy': 3.1395722619867223,
'hardness': 0.5625,
'alliteration': 0.9149440867502556,
'assonance': 0.802520508857449,
'p_open_syllables': 0.76,
'mean_syllable_len': 2.6}

Слоги и распределения доступны как атрибуты:

Пример

ps.syllables[:4]
# (('ног',), ('нет',), ('а',), ('хо', 'жу'))
ps.c_clusters
# {1: 22, 2: 6, 3: 1}
ps.c_syllable_patterns
# {'CCCV': 1, 'CCV': 5, 'CCVC': 1, 'CV': 11, 'CVC': 5, 'V': 2}

Выводит на экран таблицу с вычисленными фоностатистиками текста.

Пример

Код:

...

# Отображение таблицы вычисленных статистик
ps.print_stats()

Результат:

               Статистика               | Значение
--------------------------------------------------
Доля гласных                            |   0.40
Доля сонорных согласных                 |   0.11
Доля звонких шумных согласных           |   0.19
Доля глухих шумных согласных            |   0.29
Отношение согласных к гласным           |   1.48
Доля кластеров из 3 и более согласных   |   0.03
Зияний гласных на слово                 |   0.00
Энтропия CV-шаблонов слов (бит)         |   3.14
Жёсткость                               |   0.56
Индекс аллитерации                      |   0.91
Индекс ассонанса                        |   0.80
Доля открытых слогов                    |   0.76
Средняя длина слога (букв)              |   2.60