Статистики связности¶
ruts.cohesion_stats.CohesionStats
Описание¶
Модуль для вычисления статистик связности текста по образцу Coh-Metrix и TAACO: повторы существительных, аргументов (существительных и местоимений) и знаменательных слов между соседними предложениями и всеми парами предложений; данность - доля местоимений, отношение местоимений к существительным, доля указательных и доля знаменательных слов, уже встречавшихся в тексте; темпоральная связность - повтор времени и вида глаголов в соседних предложениях. В качестве источника данных может использоваться как непосредственно текст, так и объект класса Doc библиотеки spaCy.
Пары предложений сравниваются по леммам. Для объекта Doc с разметкой частей речи леммы, части речи, время и вид берутся из token.lemma_, token.pos_ и token.morph; без лемм (пайплайн без лемматизатора) лемма берется из разбора pymorphy3 с той же частью речи (ruts.utils.lemmatize). Для строки и Doc без разметки используется первый разбор pymorphy3.
| Понятие | pymorphy3 | Universal Dependencies (Doc) |
|---|---|---|
| Существительные | NOUN |
NOUN, PROPN |
| Местоимения | NPRO, Apro, леммы из DEMONSTRATIVE_LEMMAS |
PRON, DET, леммы из DEMONSTRATIVE_LEMMAS |
| Аргументы | NOUN, NPRO |
NOUN, PROPN, PRON |
| Знаменательные слова | CONTENT_POS без STOPWORD_GRAMMEMES и указательных |
CONTENT_UD_POS без указательных |
| Указательные | леммы из DEMONSTRATIVE_LEMMAS: этот, это, тот, такой, таковой, столько, сей, оный |
те же леммы |
| Время и вид | граммемы past, pres, futr и perf, impf |
признаки Tense и Aspect |
Показатели повторов лежат в пределах от 0 до 1; для текста из одного предложения они равны nan, как и темпоральная связность текста без глаголов в соседних предложениях. Повторы по всем парам считаются без перебора пар, см. calc_overlaps.
Примечание
Вычисление статистик происходит в момент инициализации объекта класса CohesionStats.
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
source |
str/Doc | - |
Источник данных (строка или объект Doc) |
sents_extractor |
SentsExtractor | None |
Инструмент для извлечения предложений |
words_extractor |
WordsExtractor | None |
Инструмент для извлечения слов |
Атрибуты¶
| Атрибут | Тип | Описание |
|---|---|---|
words |
tuple[tuple[str, ...], ...] | Кортеж слов каждого предложения |
lemmas |
tuple[tuple[str, ...], ...] | Кортеж лемм каждого предложения |
n_sents |
int | Количество предложений, содержащих слова |
n_words |
int | Количество слов |
n_nouns |
int | Количество существительных |
n_pronouns |
int | Количество местоимений |
n_demonstratives |
int | Количество указательных местоимений |
n_content_words |
int | Количество знаменательных слов |
n_given |
int | Количество знаменательных слов, лемма которых встречалась ранее |
noun_overlap_adjacent |
float | Доля пар соседних предложений с общим существительным |
noun_overlap_all |
float | Доля всех пар предложений с общим существительным |
argument_overlap_adjacent |
float | Доля пар соседних предложений с общим существительным или местоимением |
argument_overlap_all |
float | Доля всех пар предложений с общим существительным или местоимением |
content_overlap_adjacent |
float | Доля пар соседних предложений с общим знаменательным словом |
content_overlap_all |
float | Доля всех пар предложений с общим знаменательным словом |
content_overlap_prop_adjacent |
float | Средняя доля общих знаменательных слов в соседних предложениях |
content_overlap_prop_all |
float | Средняя доля общих знаменательных слов во всех парах предложений |
p_pronouns |
float | Доля местоимений среди слов |
pronoun_noun_ratio |
float | Отношение числа местоимений к числу существительных |
p_demonstratives |
float | Доля указательных местоимений среди слов |
p_given |
float | Доля знаменательных слов, лемма которых встречалась ранее в тексте |
tense_repetition |
float | Доля пар соседних предложений с одинаковым преобладающим временем |
aspect_repetition |
float | Доля пар соседних предложений с одинаковым преобладающим видом |
temporal_cohesion |
float | Среднее повтора времени и вида |
Примечание
Каждую статистику можно вычислить отдельно, выполнив соответствующую функцию. Подробную информацию о статистиках связности и функциях, используемых для их вычисления, можно узнать в соответствующем разделе.
Методы¶
get_stats¶
Возвращает справочник с вычисленными статистиками связности текста.
Пример
Код:
# Загрузка библиотек
from ruts import CohesionStats
# Подготовка данных
text = "Кот сидел на окне. Он смотрел на птиц. Птицы улетели, и кот уснул. Завтра он снова будет сидеть на этом окне."
# Вычисление статистик
cs = CohesionStats(text)
cs.get_stats()
Результат:
{'noun_overlap_adjacent': 0.3333333333333333,
'noun_overlap_all': 0.5,
'argument_overlap_adjacent': 0.3333333333333333,
'argument_overlap_all': 0.6666666666666666,
'content_overlap_adjacent': 0.3333333333333333,
'content_overlap_all': 0.5,
'content_overlap_prop_adjacent': 0.1111111111111111,
'content_overlap_prop_all': 0.1865079365079365,
'p_pronouns': 0.14285714285714285,
'pronoun_noun_ratio': 0.5,
'p_demonstratives': 0.047619047619047616,
'p_given': 0.2857142857142857,
'tense_repetition': 0.6666666666666666,
'aspect_repetition': 0.3333333333333333,
'temporal_cohesion': 0.5}
Слова, леммы и счетчики доступны как атрибуты:
Пример
cs.lemmas[1]
# ('он', 'смотреть', 'на', 'птица')
cs.n_nouns, cs.n_pronouns, cs.n_content_words, cs.n_given
# (6, 3, 14, 4)
print_stats¶
Выводит на экран таблицу с вычисленными статистиками связности текста.
Пример
Код:
...
# Отображение таблицы вычисленных статистик
cs.print_stats()
Результат:
Статистика | Значение
--------------------------------------------------------------------
Повтор существительных в соседних предложениях | 0.33
Повтор существительных во всех парах предложений | 0.50
Повтор аргументов в соседних предложениях | 0.33
Повтор аргументов во всех парах предложений | 0.67
Повтор знаменательных слов в соседних предложениях | 0.33
Повтор знаменательных слов во всех парах предложений | 0.50
Доля общих знаменательных слов в соседних предложениях | 0.11
Доля общих знаменательных слов во всех парах предложений | 0.19
Доля местоимений | 0.14
Отношение местоимений к существительным | 0.50
Доля указательных местоимений | 0.05
Доля знаменательных слов, встречавшихся ранее | 0.29
Повтор времени в соседних предложениях | 0.67
Повтор вида в соседних предложениях | 0.33
Темпоральная связность | 0.50