Фоностатистики¶
PhonStats(source, words_extractor=None, window_len=3)
Фоностатистики текста: его звуки по классам, их кластеры, последовательности и повторы, его слоги. Звук - по умолчанию буква слова, а если библиотека дает транскрипцию, звук транскрипции. Источник данных - текст или объект Doc библиотеки spaCy; слова берутся в нижнем регистре, а явно переданный экстрактор применяется к тексту Doc.
Исключения:
SourceTypeError- источник, который не строка и неDoc, экстрактор другого типа;SourceError- источник без слов;ParameterError- окно, которое не целое число не меньше 2.
Класс расширяет PhonStats ядра anyTS крючками русского языка: звуки - буквы слова по классам из таблицы ниже, без учета оглушения, редукции и ударения; йотированные е, ё, ю, я после гласной не дают зияния, а слова делятся на слоги по правилу восходящей звучности (Аванесов) функцией syllabify. Из слов текста и Doc убираются знаки ударения, а части дефисного слова, разрезанного spaCy, склеиваются (во-первых - одно слово). Таблица print_stats и сообщения об ошибках - по-русски (PHON_STATS_DESC и CORE_MESSAGES из ruts.constants). Время вычисления растет линейно с длиной текста.
| Класс | Буквы | Константа |
|---|---|---|
| Гласные | а, е, и, о, у, ы, э, ю, я, ё | RU_VOWELS |
| Сонорные согласные | л, м, н, р, й | RU_CONSONANTS_SONOR, RU_CONSONANTS_YET |
| Звонкие шумные согласные | б, в, г, д, ж, з | RU_CONSONANTS_HIGH |
| Глухие шумные согласные | к, п, с, т, ф, х, ц, ч, ш, щ | RU_CONSONANTS_LOW |
| Знаки | ь, ъ - не звуки: не учитываются в долях и не разрывают консонантный кластер | RU_MARKS |
from ruts import PhonStats
text = "Ног нет, а хожу, рта нет, а скажу: когда спать, когда вставать, когда работу начинать"
ps = PhonStats(text)
ps.print_stats()
Статистика | Значение
-------------------------------------------------
Доля гласных | 0.40
Доля сонорных согласных | 0.11
Доля звонких шумных согласных | 0.19
Доля глухих шумных согласных | 0.29
Отношение согласных к гласным | 1.48
Доля кластеров из 3 и более согласных | 0.03
Зияний гласных на слово | 0.00
Энтропия CV-шаблонов слов (бит) | 3.14
Жёсткость | 0.56
Индекс аллитерации | 1.09
Индекс ассонанса | 0.83
Доля открытых слогов | 0.76
Средняя длина слога (звуков) | 2.48
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
source |
str / Doc |
- | Источник данных |
words_extractor |
WordsExtractor |
None |
Инструмент для извлечения слов; применяется и к Doc, к его тексту |
window_len |
int |
3 |
Окно в словах для аллитерации и ассонанса (PHON_WINDOW_LEN) |
check_params(window_len)
Проверяет окно аллитерации и ассонанса отдельно от класса: окно, которое не целое число не меньше 2, дает ParameterError.
Атрибуты¶
| Атрибут | Тип | Описание |
|---|---|---|
words |
tuple[str] |
Слова в нижнем регистре |
window_len |
int |
Окно аллитерации и ассонанса |
syllables, sounds |
tuple |
Слоги (syllabify) и звуки (transcribe) каждого слова |
n_vowels, n_sonorants, n_voiced, n_voiceless, n_consonants |
int |
Количество звуков по классам |
c_clusters |
dict[int, int] |
Количество консонантных кластеров по длине (consonant_clusters) |
c_syllable_patterns |
dict[str, int] |
Количество слогов по CV-шаблону |
Атрибут ruTS n_marks (int) - количество ь и ъ.
ps.syllables[:4]
ps.c_clusters
ps.c_syllable_patterns
ps.n_marks
(('ног',), ('нет',), ('а',), ('хо', 'жу'))
{1: 22, 2: 6, 3: 1}
{'CCCV': 1, 'CCV': 5, 'CCVC': 1, 'CV': 11, 'CVC': 5, 'V': 2}
3
Метрики¶
Каждая метрика - атрибут объекта, который вычисляется при его создании, а get_stats дает их все.
| Метрика | Что измеряет | Диапазон | Чем больше, тем |
|---|---|---|---|
p_vowels |
Доля гласных среди звуков классов | 0-1, nan без звуков |
больше гласных |
p_sonorants |
Доля сонорных среди звуков классов | 0-1, nan без звуков |
звучнее текст |
p_voiced |
Доля звонких шумных среди звуков классов | 0-1, nan без звуков |
больше звонких шумных |
p_voiceless |
Доля глухих шумных среди звуков классов | 0-1, nan без звуков |
больше глухих шумных |
consonant_vowel_ratio |
Отношение согласных к гласным | от 0, nan без гласных |
плотнее согласные |
p_heavy_clusters |
Доля кластеров из трех и более согласных | 0-1, nan без кластеров |
тяжелее кластеры |
p_hiatus |
Зияний word_hiatus на слово |
от 0, nan без звуков |
больше гласных подряд |
cv_entropy |
Энтропия Шеннона CV-шаблонов слов в битах | от 0, nan без звуков |
разнообразнее форма слов |
hardness |
Глухие шумные к гласным и сонорным | от 0, nan без гласных и сонорных |
жестче звучание |
alliteration |
Индекс повторов согласных в окнах из window_len слов |
от 0, nan для текста короче окна или без согласной, общей для двух слов |
ближе друг к другу повторы согласных |
assonance |
Индекс повторов гласных в окнах из window_len слов |
от 0, nan для текста короче окна или без гласной, общей для двух слов |
ближе друг к другу повторы гласных |
p_open_syllables |
Доля слогов, которые оканчиваются на гласную | 0-1, nan без слогов |
больше открытых слогов |
mean_syllable_len |
Средняя длина слога в звуках | от 1, nan без слогов |
длиннее слоги |
Доли классов звуков¶
Доля звуков каждого класса - гласных, сонорных, звонких и глухих шумных согласных - среди звуков всех классов; звук из skipped или вне классов (цифра, буква другой письменности) не учитывается нигде.
Отношение согласных к гласным¶
Количество согласных n_consonants, деленное на количество гласных n_vowels.
Консонантные кластеры¶
calc_consonant_clusters(text)
Распределение консонантных кластеров слов по длине. Кластер - последовательность согласных внутри слова, в том числе одиночная согласная между гласными или на краю слова; ь и ъ кластер не прерывают.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Зияния¶
calc_hiatus(text)
Количество зияний гласных - двух и более гласных подряд внутри слова: аэропорт, аист, поэзия (о-э). Йотированные е, ё, ю, я после гласной обозначают [j] и гласный и зияния не образуют: заяц, моя, красивая, читает.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
Энтропия CV-шаблонов¶
Энтропия Шеннона CV-шаблонов слов (cv_pattern) в битах, где \(P(p)\) - доля слов с шаблоном \(p\) среди слов, у которых шаблон есть.
calc_cv_entropy(text)
Энтропия CV-шаблонов списка слов: чем выше значение, тем разнообразнее фонетическая форма слов. Слова без гласных и согласных (числа, латиница) не учитываются, а без других слов значение - nan.
cv_pattern(word)
CV-шаблон слова или слога: гласные обозначаются буквой V, согласные - C, ь, ъ и остальные символы пропускаются.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов (calc_cv_entropy) |
word |
str |
- | Слово или слог (cv_pattern) |
Жесткость¶
Количество глухих шумных согласных, деленное на количество гласных и сонорных.
Аллитерация и ассонанс¶
calc_alliteration(text, window_len=3)
calc_assonance(text, window_len=3)
Индексы аллитерации и ассонанса списка слов - индекс повторов calc_repetition_index по согласным и по гласным буквам слов. Сравниваются буквы, а не звуки: оглушение, ударение и редукция не учитываются.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
list[str] |
- | Список слов |
window_len |
int |
3 |
Окно в словах (PHON_WINDOW_LEN) |
calc_repetition_index(words, window_len, features=None)
Индекс повторов: число окон из window_len соседних слов, в которых признак (буква или звук) встречается минимум в двух словах, в сумме по признакам, деленное на число, ожидаемое при случайном порядке слов. Окно перемешанных слов - выборка без возвращения, поэтому для признака, который есть в \(K\) из \(N\) слов, окно из \(w\) слов содержит его минимум в двух словах с гипергеометрической вероятностью
а ожидаемое число - сумма этих вероятностей по признакам, умноженная на \(N - w + 1\) окон. Ожидаемое берется из самого текста, поэтому индекс показывает, собираются ли повторы в соседних словах, а не насколько частотен признак: в среднем по порядкам слов он равен 1 и заметно больше 1, когда повторы стоят ближе, чем при случайном порядке. Слово учитывает признак один раз; индекс равен nan для текста короче окна или без признака, общего для двух слов.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
words |
list[str] / list[list[str]] |
- | Признаки каждого слова: строка его букв или коллекция его звуков |
window_len |
int |
- | Окно в словах, не меньше 2 |
features |
Collection[str] |
None |
Признаки для подсчета, по умолчанию все |
Слова, которые не список строк или коллекций строк, и признаки, которые не коллекция строк, дают SourceTypeError, а window_len, который не целое число не меньше 2, - ParameterError.
Слоги¶
Слоги - звуки каждого слога слова по syllable_sounds; слог без звука из классов (число) слогом не считается, в том числе в c_syllable_patterns. Открытый слог оканчивается на гласную по своему CV-шаблону (cv_pattern), а длина слога - длина этого шаблона: звуки классов без skipped и символов вне классов.
В ruTS длина слога - число его букв без ь и ъ.
is_open_syllable(syllable)
Проверяет, является ли слог открытым - оканчивается на гласную; ь и ъ после гласной слог не закрывают.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
syllable |
str |
- | Слог |
Функции ruTS принимают слова строками и считают по русским классам букв из таблицы выше. Функции calc_* проверяют аргументы: слова, которые не список строк, дают SourceTypeError, а окно, которое не целое число не меньше 2, - ParameterError.
from ruts.phon_stats import (
calc_alliteration,
calc_consonant_clusters,
calc_cv_entropy,
calc_hiatus,
cv_pattern,
is_open_syllable,
)
words = ["слышно", "бесшумно", "шуршат", "камыши", "у", "поэта"]
cv_pattern("всплеск"), is_open_syllable("съе")
calc_consonant_clusters(words)
calc_hiatus(words), calc_cv_entropy(words)
calc_alliteration(words, window_len=2)
('CCCCVCC', True)
{1: 8, 2: 5}
(1, 2.584962500721156)
1.4999999999999998
Методы¶
Методы get_stats, to_dataframe, print_stats и describe - из интерфейса статистик ядра anyTS; шкал у фоностатистик нет, поэтому describe для статистик get_stats возвращает None.
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': 1.0916179337231968,
'assonance': 0.8305084745762712,
'p_open_syllables': 0.76,
'mean_syllable_len': 2.48}