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

Функции вычисления статистик

Функции повторов принимают множества или списки лемм каждого предложения в порядке текста; признаки слов для класса CohesionStats дают word_info и token_info. В скобках указаны названия индексов Coh-Metrix.

Бинарный повтор

ruts.cohesion_stats.calc_overlap()

Вычисление доли пар предложений с общим элементом: леммой существительного (CRFNO1, CRFNOa), аргумента (CRFAO1, CRFAOa) или знаменательного слова (CRFSO1, CRFSOa). По умолчанию считаются пары соседних предложений, при adjacent=False - все пары. Для текста короче двух предложений возвращается nan.

Формула:

\[ \frac{|\{(i, j): S_i \cap S_j \neq \varnothing\}|}{|\{(i, j)\}|} \]

где \(S_i\) - множество лемм предложения \(i\), пары \((i, j)\) - соседние или все.

Параметры:

Параметр Тип По умолчанию Описание
sets list[set[str]] - Множества элементов каждого предложения
adjacent bool True Считать только соседние пары, иначе все пары

Пример

from ruts.cohesion_stats import calc_overlap

sets = [{"кот", "окно"}, {"птица"}, {"птица", "кот"}, {"окно"}]
calc_overlap(sets)
# 0.3333333333333333
calc_overlap(sets, adjacent=False)
# 0.5

Пропорциональный повтор

ruts.cohesion_stats.calc_proportional_overlap()

Вычисление средней доли общих элементов в парах предложений (CRFCWO1, CRFCWOa): коэффициент Дайса множеств лемм, усредненный по соседним или всем парам; пара без элементов получает 0.

Формула:

\[ \frac{1}{|\{(i, j)\}|} \sum_{(i, j)} \frac{2 \cdot |S_i \cap S_j|}{|S_i| + |S_j|} \]

Параметры:

Параметр Тип По умолчанию Описание
sets list[set[str]] - Множества элементов каждого предложения
adjacent bool True Считать только соседние пары, иначе все пары

Все повторы за один расчет

ruts.cohesion_stats.calc_overlaps(), ruts.cohesion_stats.dice(), ruts.cohesion_stats.Overlap

Вычисление бинарного и пропорционального повторов по соседним и всем парам предложений; возвращает Overlap(adjacent, all, prop_adjacent, prop_all) с теми же значениями, что calc_overlap и calc_proportional_overlap. Соседние пары обходятся напрямую. Число всех пар с общим элементом считается по битовым маскам вхождений элементов в предложения (блоками по 4096 предложений), сумма коэффициентов Дайса - по гистограммам длин предложений для каждого элемента: \((h W h - h \cdot \mathrm{diag}(W)) / 2\), где \(h\) - гистограмма длин предложений с элементом, \(W_{kl} = 2/(k+l)\). Время линейно по числу вхождений. Функция dice считает коэффициент Дайса двух множеств.

Параметры:

Параметр Тип По умолчанию Описание
sets list[set[str]] - Множества элементов каждого предложения

Данность

ruts.cohesion_stats.count_given()

Вычисление количества данных элементов - лемм, уже встречавшихся раньше в тексте, включая текущее предложение. Класс CohesionStats делит количество данных знаменательных слов на их общее число (p_given); доля местоимений p_pronouns, отношение местоимений к существительным pronoun_noun_ratio и доля указательных p_demonstratives считаются по счетчикам класса.

Параметры:

Параметр Тип По умолчанию Описание
sents list[list[str]] - Леммы каждого предложения в порядке текста

Повтор времени и вида

ruts.cohesion_stats.calc_repetition(), ruts.cohesion_stats.dominant()

Вычисление доли пар соседних предложений с одинаковым преобладающим значением признака глаголов - времени или вида (SMTEMP). dominant берет самое частое значение (при равенстве - первое); пары, где у одного из предложений нет глаголов с признаком, пропускаются, без таких пар возвращается nan. Класс CohesionStats считает tense_repetition, aspect_repetition и их среднее temporal_cohesion.

Параметры:

Параметр Тип По умолчанию Описание
sents list[list[str]] - Значения признака глаголов каждого предложения

Признаки слова

ruts.cohesion_stats.word_info(), ruts.cohesion_stats.token_info(), ruts.cohesion_stats.WordInfo

Получение признаков слова для статистик связности - именованного кортежа WordInfo: лемма, существительное, местоимение, указательное, аргумент, знаменательное слово, время и вид. word_info берет их из первого разбора pymorphy3, token_info - из разметки spaCy (token.lemma_, token.pos_, Tense, Aspect); у токена без леммы она берется из разбора pymorphy3 с частью речи токена (ruts.utils.lemmatize).

Параметры:

Параметр Тип По умолчанию Описание
word / token str / Token - Слово или токен spaCy

Местоимение

ruts.cohesion_stats.is_pronoun()

Проверка, является ли слово местоимением: NPRO (он, себя, кто) или Apro (этот, который, мой, весь) по разметке pymorphy3.

Параметры:

Параметр Тип По умолчанию Описание
word str - Слово

Знаменательное слово

ruts.cohesion_stats.is_content_word()

Проверка, является ли слово знаменательным: часть речи из CONTENT_POS (существительные, прилагательные, глаголы во всех формах, наречия) без граммем STOPWORD_GRAMMEMES (местоименные и вводные слова).

Параметры:

Параметр Тип По умолчанию Описание
word str - Слово