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

Статистики связности

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)

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

Пример

Код:

...

# Отображение таблицы вычисленных статистик
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