Статистики связности¶
CohesionStats(source, sents_extractor=None, words_extractor=None, connectors=None, blank_lines=False)
Статистики связности текста по образцу Coh-Metrix и TAACO: повторы слов в предложениях, данность, темпоральная связность и коннекторы словаря. Предложения сравниваются по леммам. Источник данных - текст или объект Doc библиотеки spaCy.
Исключения:
SourceTypeError- источник, который не строка и неDoc, экстрактор другого типа, коннекторы, которые не словарь словосочетаний и пар строк;SourceError- источник без слов;ParameterError- неизвестный класс или тип коннектора,blank_lines, который неbool.
Класс расширяет CohesionStats ядра anyTS русским слоем и, в отличие от ядра, читает и строку. Строка и Doc без границ предложений делятся на предложения русским SentsExtractor; слова строки дает русский WordsExtractor или заданный words_extractor. Для Doc с разметкой частей речи часть речи, время и вид берутся из token.pos_ и token.morph, а лемма - из разбора ruMorph с частью речи токена (unit_info); для строки - из разбора ruMorph в контексте предложения (analysis_info), для Doc без разметки - так же в предложениях, слова которых совпадают со словами строки, а остальные слова, как и с заданным экстрактором слов, - из первого разбора ruMorph (words_info), где ответное «нет» - частица. Части дефисного слова, разрезанного spaCy, склеиваются (во-первых - одно слово). Коннекторы ищет RussianConnectorMatcher по словарю load_connectors. Таблица print_stats и сообщения об ошибках - по-русски (COHESION_STATS_DESC и CORE_MESSAGES из ruts.constants).
Слова классифицируются по частям речи и признакам Universal Dependencies - разбора ruMorph для строки или разметки объекта Doc:
| Понятие | Строка (ruMorph) | Doc |
|---|---|---|
| Существительные | NOUN, PROPN |
NOUN, PROPN |
| Местоимения | PRON, DET, леммы из DEMONSTRATIVE_LEMMAS |
PRON, DET, леммы из DEMONSTRATIVE_LEMMAS |
| Аргументы | NOUN, PROPN, PRON |
NOUN, PROPN, PRON |
| Знаменательные слова | CONTENT_UD_POS без указательных, местоименных (PronType Dem, Int, Rel: там, где, почему) и вводных (помета Prnt) слов, предикативов и чисел цифрами |
CONTENT_UD_POS без указательных |
| Указательные | леммы из DEMONSTRATIVE_LEMMAS: этот, это, тот, такой, таковой, столько, сей, оный |
те же леммы |
| Время и вид | признаки Tense и Aspect |
признаки Tense и Aspect |
from ruts import CohesionStats
text = "Кот сидел на окне. Он смотрел на птиц. Птицы улетели, и кот уснул. Завтра он снова будет сидеть на этом окне."
cs = CohesionStats(text)
cs.print_stats()
Статистика | Значение
--------------------------------------------------------------------
Повтор существительных в соседних предложениях | 0.33
Повтор существительных во всех парах предложений | 0.50
Повтор аргументов в соседних предложениях | 0.33
Повтор аргументов во всех парах предложений | 0.67
Повтор знаменательных слов в соседних предложениях | 0.33
Повтор знаменательных слов во всех парах предложений | 0.50
Доля общих знаменательных слов в соседних предложениях | 0.11
Доля общих знаменательных слов во всех парах предложений | 0.20
Повтор существительных в двух следующих предложениях | 0.67
Повтор аргументов в двух следующих предложениях | 0.75
Повтор знаменательных слов в двух следующих предложениях | 0.40
Повтор существительных в соседних абзацах | nan
Повтор аргументов в соседних абзацах | nan
Повтор знаменательных слов в соседних абзацах | nan
Доля местоимений | 0.14
Отношение местоимений к существительным | 0.50
Доля указательных местоимений | 0.05
Доля знаменательных слов, встречавшихся ранее | 0.31
Повтор времени в соседних предложениях | 0.67
Повтор вида в соседних предложениях | 0.33
Темпоральная связность | 0.50
Коннекторов на 1000 слов | 47.62
Межпредложенческих коннекторов на 1000 слов | 0.00
Внутрипредложенческих коннекторов на 1000 слов | 47.62
Причинных коннекторов на 1000 слов | 0.00
Противительных коннекторов на 1000 слов | 0.00
Уступительных коннекторов на 1000 слов | 0.00
Временных коннекторов на 1000 слов | 0.00
Аддитивных коннекторов на 1000 слов | 47.62
Условных коннекторов на 1000 слов | 0.00
Переформулирующих коннекторов на 1000 слов | 0.00
Первичных коннекторов на 1000 слов | 47.62
Вторичных коннекторов на 1000 слов | 0.00
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
source |
str / Doc |
- | Источник данных |
sents_extractor |
SentsExtractor |
None |
Инструмент для извлечения предложений; заданный, делит и Doc по его тексту независимо от границ |
words_extractor |
WordsExtractor |
None |
Инструмент для извлечения слов; заданный, применяется и к тексту Doc |
connectors |
dict[str, tuple[str, str]] |
None |
Класс и тип по коннектору; по умолчанию словарь load_connectors |
blank_lines |
bool |
False |
Абзацы только после пустых строк - для текста, строки которого переносятся внутри абзаца; по умолчанию абзац - строка |
Атрибуты¶
| Атрибут | Тип | Описание |
|---|---|---|
words, lemmas |
tuple[tuple[str]] |
Слова и леммы каждого предложения, в котором есть слова |
n_sents, n_words |
int |
Количество предложений со словами и количество слов |
blank_lines |
bool |
Начинаются ли абзацы только после пустых строк |
n_paragraphs |
int |
Количество абзацев - строк текста со знаменательными словами (частей между пустыми строками с blank_lines) |
n_nouns, n_pronouns, n_demonstratives, n_content_words |
int |
Количество слов по видам |
n_given |
int |
Количество знаменательных слов, лемма которых встречалась раньше |
n_connectors, connector_spans, c_connectors |
int, tuple[Connector], dict[str, int] |
Количество коннекторов, их вхождения и количество вхождений по коннекторам |
n_inter_connectors |
int |
Количество межпредложенческих коннекторов |
Заданные экстракторы хранятся в атрибутах sents_extractor и words_extractor, без них - None.
cs.lemmas[1]
cs.n_nouns, cs.n_pronouns, cs.n_content_words, cs.n_given
cs.connector_spans
cs.c_connectors
('он', 'смотреть', 'на', 'птица')
(6, 3, 13, 4)
(Connector(sent=2, start=2, end=3, text='и', cls='additive', kind='primary'),)
{'и': 1}
Метрики¶
Каждая метрика - атрибут объекта, который вычисляется при его создании; get_stats дает метрики из stats_desc, по умолчанию все, кроме mood_repetition. Функции карточек принимают предложение как набор его элементов - лемм существительных, аргументов или знаменательных слов, значений признака его глаголов - и языка не знают.
| Метрика | Что измеряет | Диапазон | Чем больше, тем |
|---|---|---|---|
noun_overlap_adjacent |
Доля соседних пар предложений с общим существительным | 0-1, nan для одного предложения |
теснее связаны соседние предложения |
noun_overlap_all |
Доля всех пар предложений с общим существительным | 0-1, nan для одного предложения |
теснее связан весь текст |
argument_overlap_adjacent |
Доля соседних пар с общим существительным или местоимением | 0-1, nan для одного предложения |
теснее связаны соседние предложения |
argument_overlap_all |
Доля всех пар с общим существительным или местоимением | 0-1, nan для одного предложения |
теснее связан весь текст |
content_overlap_adjacent |
Доля соседних пар с общим знаменательным словом | 0-1, nan для одного предложения |
теснее связаны соседние предложения |
content_overlap_all |
Доля всех пар с общим знаменательным словом | 0-1, nan для одного предложения |
теснее связан весь текст |
content_overlap_prop_adjacent |
Средняя доля общих знаменательных слов (Дайс) в соседних парах | 0-1, nan для одного предложения |
больше общих слов у соседей |
content_overlap_prop_all |
Средняя доля общих знаменательных слов (Дайс) во всех парах | 0-1, nan для одного предложения |
больше общих слов по всему тексту |
noun_overlap_2_sent |
Доля существительных предложения, повторенных в одном из двух следующих | 0-1, nan для текста короче трех предложений или без существительных в сравниваемых |
больше существительных переходит дальше |
argument_overlap_2_sent |
Доля аргументов предложения, повторенных в одном из двух следующих | 0-1, nan для текста короче трех предложений или без аргументов в сравниваемых |
больше аргументов переходит дальше |
content_overlap_2_sent |
Доля знаменательных слов предложения, повторенных в одном из двух следующих | 0-1, nan для текста короче трех предложений или без знаменательных слов в сравниваемых |
больше знаменательных слов переходит дальше |
noun_overlap_para |
Доля существительных абзаца, повторенных в следующем | 0-1, nan для одного абзаца или без существительных в сравниваемых |
больше существительных переходит в следующий абзац |
argument_overlap_para |
Доля аргументов абзаца, повторенных в следующем | 0-1, nan для одного абзаца или без аргументов в сравниваемых |
больше аргументов переходит в следующий абзац |
content_overlap_para |
Доля знаменательных слов абзаца, повторенных в следующем | 0-1, nan для одного абзаца или без знаменательных слов в сравниваемых |
больше знаменательных слов переходит в следующий абзац |
p_pronouns |
Доля местоимений среди слов | 0-1 | больше отсылок местоимениями |
pronoun_noun_ratio |
Отношение местоимений к существительным | от 0, nan без существительных |
больше местоимений на существительное |
p_demonstratives |
Доля указательных среди слов | 0-1 | больше указаний назад |
p_given |
Доля знаменательных слов, лемма которых уже встречалась в тексте | 0-1, nan без знаменательных слов |
больше данной информации |
tense_repetition |
Доля соседних пар предложений с одинаковым преобладающим временем | 0-1, nan без двух соседних предложений с признаком |
устойчивее время |
mood_repetition |
Доля соседних пар с одинаковым преобладающим наклонением | 0-1, nan без двух соседних предложений с признаком |
устойчивее наклонение |
aspect_repetition |
Доля соседних пар с одинаковым преобладающим видом | 0-1, nan без двух соседних предложений с признаком |
устойчивее вид |
temporal_cohesion |
Среднее повторов признаков temporal_features |
0-1, nan, если один из них nan |
устойчивее временной план |
connectors |
Коннекторы на 1000 слов | 0-1000 | больше явных связей |
connectors_inter |
Межпредложенческие коннекторы на 1000 слов | 0-1000 | больше связей с предыдущими предложениями |
connectors_intra |
Внутрипредложенческие коннекторы на 1000 слов | 0-1000 | больше связей внутри предложений |
connectors_<class>, connectors_<kind> |
Коннекторы класса или типа сопоставителя на 1000 слов | 0-1000 | больше связей этого класса или типа |
Бинарный повтор¶
calc_overlap(sets, adjacent=True)
Бинарный повтор Coh-Metrix (CRFNO1, CRFAO1, CRFSO1 по соседним парам, CRFNOa, CRFAOa, CRFSOa по всем): доля пар предложений хотя бы с одним общим элементом; для текста короче двух предложений - nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
sets |
list[set[str]] |
- | Элементы каждого предложения |
adjacent |
bool |
True |
Считать только соседние пары, иначе все пары |
Пропорциональный повтор¶
calc_proportional_overlap(sets, adjacent=True)
Пропорциональный повтор Coh-Metrix (CRFCWO1, CRFCWOa): коэффициент Дайса пары предложений (dice), усредненный по парам; для текста короче двух предложений - nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
sets |
list[set[str]] |
- | Элементы каждого предложения |
adjacent |
bool |
True |
Считать только соседние пары, иначе все пары |
dice(first, second)
Коэффициент Дайса двух множеств, 0 для двух пустых множеств.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
first |
frozenset[str] |
- | Первое множество |
second |
frozenset[str] |
- | Второе множество |
Повтор в следующих предложениях и абзацах¶
Соседний повтор TAACO по леммам существительных, аргументов и знаменательных слов: доля разных лемм предложения, повторенных в одном из двух следующих предложений (adjacent_overlap_2_*_sent), и лемм абзаца, повторенных в следующем абзаце (adjacent_overlap_*_para), по всем предложениям или абзацам, у которых они есть (calc_forward_overlap). В отличие от бинарного повтора, пара сегментов учитывается по доле их общих лемм. Абзац - строка текста, как в TAACO, или часть между пустыми строками с blank_lines - для текста, строки которого переносятся внутри абзаца; его открывает слово с paragraph_start, в том числе внутри предложения, например когда парсер присоединяет заголовок к следующему предложению. Абзац без знаменательных слов, например номер главы, присоединяется к следующему, а последний такой - к предыдущему.
calc_forward_overlap(sets, span=1)
Доля элементов сегмента, повторенных в следующих: разные элементы каждого сегмента, за которым идут еще span сегментов, встречающиеся в одном из этих сегментов, деленные на разные элементы таких сегментов; если сегментов не больше span или в них нет элементов, значение - nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
sets |
list[set[str]] |
- | Элементы каждого сегмента |
span |
int |
1 |
Число \(k\) следующих сегментов, с которыми сравнивается сегмент |
Сегменты, которые являются строкой, Doc или итератором, и сегмент, который не список строк, дают SourceTypeError, а span, который не целое число больше 0, - ParameterError.
В ruTS на абзацы делятся и строка, и Doc. В стихах без пустых строк абзац - стих, а строфы, как у VerseStats, дает blank_lines=True там, где они разделены пустыми строками.
from ruts.cohesion_stats import calc_forward_overlap
calc_forward_overlap([{"кот", "окно"}, {"птица"}, {"кот"}], span=2)
text = "Кот сидел на окне. Он смотрел на птиц.\nПтицы улетели, и кот уснул. Завтра он снова будет сидеть на этом окне."
paragraphs = CohesionStats(text)
paragraphs.n_paragraphs, paragraphs.noun_overlap_para, paragraphs.content_overlap_para
CohesionStats(text, blank_lines=True).n_paragraphs
0.5
(2, 1.0, 0.8)
1
Местоимения и указательные¶
Местоимения, существительные и указательные - слова, которые так размечает analyze, по умолчанию с признаками word_info.
В ruTS их размечают функции признаков слова по таблице классов слов.
Данность¶
count_given(sents)
Количество данных элементов: элемент дан, если та же лемма уже встречалась раньше в любом предложении, включая текущее; первое вхождение - новое.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
sents |
list[list[str]] |
- | Леммы каждого предложения в порядке текста |
Темпоральная связность¶
calc_repetition(sents)
Повтор времени и вида Coh-Metrix (SMTEMP): доля пар соседних предложений, у глаголов которых одинаковое преобладающее значение признака; пара, в которой у одного из предложений нет глагола с признаком, пропускается, а если ни одной такой пары нет, значение - nan.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
sents |
list[list[str]] |
- | Значения признака глаголов каждого предложения |
dominant(values)
Преобладающее значение: самое частое, из равно частых - первое; для пустого списка - None.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
values |
list[str] |
- | Значения |
Наклонение CohesionStats в ruTS не сравнивает: mood_repetition всегда равен nan, а temporal_cohesion - среднее tense_repetition и aspect_repetition.
Коннекторы¶
Вхождения коннекторов, найденных в каждом предложении сопоставителем connector_matcher_class, на 1000 слов. Межпредложенческий коннектор связывает предложение с предыдущими: он открывает предложение, если сопоставитель не считает его подчинительным (is_subordinator) - клауза или группа подчинительного принадлежит тому же предложению; остальные - внутрипредложенческие. Каждый класс и тип сопоставителя дает свою плотность: по умолчанию connectors_causal, connectors_adversative, connectors_concessive, connectors_temporal, connectors_additive, connectors_conditional, connectors_reformulative, connectors_primary и connectors_secondary.
load_connectors()
Словарь коннекторов ruTS: файл ruts/resources/connectors.tsv - 316 коннекторов с классом из CONNECTOR_CLASSES и типом из CONNECTOR_TYPES модуля ruts.constants, составленных по классификации Криони, Никина и Филипповой (2008) со сверкой по списку маркеров Ru-RSTreebank, базе Рускон и списку причинных маркеров Тольдовой и др. (2018). Однословные «и», «а», «но» входят в словарь, как в Coh-Metrix и TAACO; «что» и «как» коннекторами не считаются.
| Класс | Ключ | Примеры |
|---|---|---|
| Причинные (включая следственные и целевые) | causal |
потому что, поэтому, в результате, чтобы, таким образом |
| Противительные | adversative |
но, однако, зато, с другой стороны, в то же время |
| Уступительные | concessive |
хотя, несмотря на, тем не менее, и всё же, в любом случае |
| Временные | temporal |
когда, затем, после того как, тем временем, в дальнейшем |
| Аддитивные | additive |
и, также, кроме того, более того, например, во-первых |
| Условные | conditional |
если, в случае если, при условии что, в противном случае |
| Переформулирующие | reformulative |
то есть, иными словами, в общем, подводя итог |
Первичные коннекторы (primary) - союзы, наречия и частицы (потому что, однако, затем), вторичные (secondary) - лексикализованные обороты с существительными и глаголами (в результате этого, с другой стороны, иными словами). Правила, по которым слово словаря считается коннектором, - у сопоставителя.
Список предложений, который является строкой, Doc, итератором, множеством или таблицей, дает SourceTypeError, как и предложение, которое не список строк (check_words), например список токенов spaCy. Функции повторов (calc_overlap, calc_proportional_overlap, calc_overlaps) принимают предложение и в виде множества; count_given и calc_repetition считают слова по порядку и множество не принимают.
from ruts.cohesion_stats import calc_overlap, calc_repetition, count_given
sets = [{"кот", "окно"}, {"птица"}, {"птица", "кот"}, {"окно"}]
calc_overlap(sets), calc_overlap(sets, adjacent=False)
count_given([["кот", "окно"], ["птица"], ["птица", "кот"]])
calc_repetition([["past"], ["past", "pres", "past"], ["futr"]])
(0.3333333333333333, 0.5)
2
0.5
Методы¶
Методы get_stats, to_dataframe, print_stats и describe - из интерфейса статистик ядра anyTS; шкал у статистик связности нет, поэтому describe для статистик get_stats возвращает None.
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.19841269841269837,
'noun_overlap_2_sent': 0.6666666666666666,
'argument_overlap_2_sent': 0.75,
'content_overlap_2_sent': 0.4,
'noun_overlap_para': nan,
'argument_overlap_para': nan,
'content_overlap_para': nan,
'p_pronouns': 0.14285714285714285,
'pronoun_noun_ratio': 0.5,
'p_demonstratives': 0.047619047619047616,
'p_given': 0.3076923076923077,
'tense_repetition': 0.6666666666666666,
'aspect_repetition': 0.3333333333333333,
'temporal_cohesion': 0.5,
'connectors': 47.61904761904762,
'connectors_inter': 0.0,
'connectors_intra': 47.61904761904762,
'connectors_causal': 0.0,
'connectors_adversative': 0.0,
'connectors_concessive': 0.0,
'connectors_temporal': 0.0,
'connectors_additive': 47.61904761904762,
'connectors_conditional': 0.0,
'connectors_reformulative': 0.0,
'connectors_primary': 47.61904761904762,
'connectors_secondary': 0.0}
Все повторы за один расчет¶
calc_overlaps(sets, proportional=True)
Значения calc_overlap и calc_proportional_overlap по соседним и по всем парам сразу - именованный кортеж Overlap с полями adjacent, all, prop_adjacent и prop_all; без proportional последние два равны nan. Значения по всем парам получаются без перебора каждой пары, и ни одно из них не зависит от порядка элементов в множествах.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
sets |
list[set[str]] |
- | Элементы каждого предложения |
proportional |
bool |
True |
Вычислять и пропорциональный повтор |
Класс CohesionStats считает с ее помощью повторы существительных и аргументов без пропорциональных, а повторы знаменательных слов - с ними.
from ruts.cohesion_stats import calc_overlaps
calc_overlaps([{"кот", "окно"}, {"птица"}, {"птица", "кот"}, {"окно"}])
Overlap(adjacent=0.3333333333333333, all=0.5, prop_adjacent=0.2222222222222222, prop_all=0.3055555555555555)
Сопоставитель коннекторов¶
RussianConnectorMatcher(connectors)
Поиск коннекторов словаря (дискурсивных маркеров: потому что, однако, с другой стороны) в предложениях текста. Словарь задает класс каждого коннектора - причинный, противительный, уступительный, временной, аддитивный, условный или переформулирующий (CONNECTOR_CLASSES) - и его тип, первичный или вторичный (CONNECTOR_KINDS). Коннектор сопоставляется по нормализованным формам его слов: в каждой позиции берется самый длинный, найденные не пересекаются; точку и дефис внутри коннектора токенизатор может отделить (т.е. - т, е), а точка сокращения может остаться при каждой его части, как в токенах UD (т., е.). Вхождение - Connector: номер предложения sent, позиции его слов start и end, коннектор text в написании словаря, его класс cls и тип kind.
Исключения:
SourceTypeError- словарь, который не отображение словосочетания в пару строк;ParameterError- неизвестный класс или тип.
RussianConnectorMatcher - подкласс ConnectorMatcher ядра с правилами русского языка. Слова и коннекторы сравниваются в нижнем регистре без буквы ё и знаков ударения (normalize_yo). Однословному коннектору подходит часть речи из CONNECTOR_POS ядра (CCONJ, SCONJ, PART, ADV, ADP, INTJ, X) или из CONNECTOR_POS_EXTRA для его формы (словом и главное - NOUN, допустим, предположим, резюмируя - VERB): «раз» как существительное и «значит» как глагол коннекторами не считаются. Контекстные правила - списки ruts.constants: слова после коннектора (CONNECTOR_BLOCKED_AFTER: пока что, хоть бы) и перед ним (CONNECTOR_BLOCKED_BEFORE: ещё раз, и так далее), с которыми он не коннектор; коннекторы, которые внутри предложения засчитываются только после отдельных слов (CONNECTOR_ONLY_AFTER: и отсюда) и не засчитываются в его начале (CONNECTOR_NOT_AT_START: вопросительное отчего); части речи слова после коннектора, с которыми он предлог или член предложения (CONNECTOR_BLOCKED_AFTER_POS: после обеда, едва заметный). Через знак препинания правила читают только у CONNECTOR_READ_THROUGH_MARKS (не знал, отчего), так что вводное значит, остается коннектором, а знак между словами коннектора из CONNECTOR_SPLIT_BY_MARKS его разделяет (так, как). Эти части речи и списки - атрибуты сопоставителя: CONNECTOR_POS - pos_tags, остальные - под именем без CONNECTOR_ в нижнем регистре (CONNECTOR_BLOCKED_AFTER - blocked_after); атрибуты not_after_pos и start_only_pos в ruTS пусты, так что эти правила find не действуют.
find(words, sent_index, pos, breaks, blocked) возвращает вхождения коннекторов в предложении в порядке слов. Слова - слова одного предложения без знаков препинания, первое из них - его начало. С частями речи однословный коннектор засчитывается только при части речи из pos_tags или из pos_extra для его формы, никогда - после части речи из not_after_pos, а с частью речи из start_only_pos - только в начале предложения; слово без части речи (None) проходит. Без частей речи правила, которые их читают, пропускаются. Позиции знаков препинания breaks отделяют коннектор от соседей: правило не читает слово через знак, так что в значит, пойдем слово после запятой не запрещает коннектор и не разрешает его, если коннектор не из read_through_marks, а знак между словами коннектора из split_by_marks делает его не коннектором; без позиций слова читаются как соседние. Ни один коннектор не начинается со слова из blocked, которое язык исключает по большему, чем слова и их части речи, например по своему разбору.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
words |
list[str] |
- | Слова предложения |
sent_index |
int |
0 |
Номер предложения для записи во вхождения |
pos |
list[str] |
None |
Части речи слов |
breaks |
set[int] |
None |
Позиции слов, перед которыми стоит знак препинания |
blocked |
set[int] |
None |
Позиции слов, с которых не начинается коннектор |
Слова, которые не список строк, части речи, которые не список строк и None (теги token.pos_ spaCy, а не числа token.pos), и позиции, которые не коллекция, дают SourceTypeError; номер предложения или позиция, которые не целое число, позиция знака, которая не позиция слова после первого, позиция из blocked, которая не позиция слова, и частей речи не столько, сколько слов, - ParameterError.
is_subordinator(connector, pos=None) проверяет, привязывает ли вхождение коннектора свою клаузу или группу к собственному предложению: коннектор из subordinators или однословный коннектор с частью речи pos SCONJ или ADP, но не из parcellation. Клауза подчинительного союза и группа предлога принадлежат предложению коннектора, где бы он ни стоял, поэтому подчинительный, открывающий предложение (когда он пришел, ..., вопреки ожиданиям, ...), не связывает его с предыдущими. Коннектор, который не Connector, дает SourceTypeError.
Подчинительные в ruTS сверх однословных с частью речи SCONJ и ADP - CONNECTOR_SUBORDINATORS: многословные союзы и предлоги (так как, после того как, несмотря на) и однословные, которые модели spaCy или ruMorph размечают иначе (ежели, коли, пока, раз, хоть, едва). Союз из CONNECTOR_PARCELLATION (ибо) в начале предложения присоединяет его к предыдущему, поэтому подчинительным не считается.
Поиск коннекторов¶
find_connectors(words, connectors=None, sent_index=0, pos=None, breaks=None, blocked=None)
Ищет коннекторы в предложении методом find сопоставителя RussianConnectorMatcher по словарю connectors, по умолчанию - по словарю load_connectors; остальные параметры и исключения - те же, что у сопоставителя и find.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
connectors |
dict[str, tuple[str, str]] |
None |
Класс и тип по коннектору |
connector_pos(word)
Часть речи UD слова по ruMorph для проверки коннектора: первый разбор с частью речи, подходящей коннектору (CONNECTOR_POS или CONNECTOR_POS_EXTRA для этого слова), иначе первый разбор. Так CohesionStats получает части речи слов, которые разбираются по одному: с заданным экстрактором слов и в предложениях Doc без разметки, слова которых не совпали со словами строки.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
word |
str |
- | Слово |
from ruts.cohesion_stats import find_connectors
find_connectors(["Затем", "иными", "словами", "он", "уснул"])
find_connectors(["Раз", "он", "пришел"])
find_connectors(["Раз", "он", "пришел"], pos=["NOUN", "PRON", "VERB"])
[Connector(sent=0, start=0, end=1, text='затем', cls='temporal', kind='primary'),
Connector(sent=0, start=1, end=3, text='иными словами', cls='reformulative', kind='secondary')]
[Connector(sent=0, start=0, end=1, text='раз', cls='conditional', kind='primary')]
[]
Признаки слова¶
word_info(word)
words_info(sents, text, analyses=None)
analysis_info(analysis)
token_info(token)
ud_info(word, pos, tense, aspect)
unit_info(unit)
Признаки слова для статистик связности - именованный кортеж WordInfo: lemma, noun, pronoun, demonstrative, argument, content, tense и aspect по таблице классов слов. word_info берет их из первого разбора ruMorph, analysis_info - из заданного разбора ruMorph, например выбранного по контексту (ruts.utils.analyze_sentence); words_info - так же для слов предложений текста: по разбору из analyses, если он задан, иначе по первому разбору, где ответное «нет» (Нет, не видел) - частица. token_info берет их из разметки spaCy (token.pos_, Tense, Aspect), ud_info - из заданных части речи, времени и вида UD; лемма берется из разбора ruMorph с этой частью речи (ruts.utils.lemmatize), а не из token.lemma_. unit_info дает признаки слова по его токенам: отдельного токена - по token_info, дефисного слова из нескольких токенов (жили-были, назовите-ка) - по разбору ruMorph склеенного текста (word_to_ud).
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
word |
str |
- | Слово (word_info, ud_info) |
sents |
list[list[str]] |
- | Слова предложений текста (words_info) |
text |
str |
- | Текст, из которого извлечены слова (words_info) |
analyses |
list[list[Analysis \| None]] |
None |
Разборы слов предложений, None - разбор по слову (words_info) |
analysis |
Analysis |
- | Разбор ruMorph (analysis_info) |
token |
Token |
- | Токен spaCy (token_info) |
pos, tense, aspect |
str |
- | Часть речи, время и вид UD (ud_info) |
unit |
list[Token] |
- | Токены слова (unit_info) |
from ruts.cohesion_stats import word_info
word_info("смотрел")
WordInfo(lemma='смотреть', noun=False, pronoun=False, demonstrative=False, argument=False, content=True, tense='Past', aspect='Imp')
Слова Doc¶
split_doc_units(source, sents_extractor, join_hyphens=False)
Разбивает слова Doc или Span по предложениям экстрактора предложений - для Doc без границ предложений или для того, который нужно разбить иначе: предложения находятся в его тексте по порядку, а слово iter_doc_units относится к предложению, в котором лежит его первый токен. Слова вне найденных предложений, отброшенные экстрактором, не учитываются, поэтому если ни одного предложения не найдено, слов нет.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
source |
Doc / Span |
- | Объект Doc или Span |
sents_extractor |
SentsExtractor |
- | Инструмент для извлечения предложений |
join_hyphens |
bool |
False |
Склеивать части дефисных слов |
Класс CohesionStats склеивает части дефисных слов всегда, а функция - только с join_hyphens=True.
unit_text(unit)
unit_pos(unit)
unit_text дает текст слова по его токенам без метки порядка байтов, знаков ударения и мягких переносов (ruts.utils.strip_marks), unit_pos - его часть речи UD: для отдельного токена - часть речи токена, для дефисного слова из нескольких токенов - часть речи connector_pos склеенного текста.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
unit |
list[Token] |
- | Токены слова |
import spacy
from ruts import SentsExtractor
from ruts.cohesion_stats import split_doc_units, unit_text
doc = spacy.blank("ru")("Жили-были дед да баба. Во-первых, кот спит.")
units = split_doc_units(doc, SentsExtractor())
[[unit_text(unit) for unit in sent] for sent in units]
units = split_doc_units(doc, SentsExtractor(), join_hyphens=True)
[[unit_text(unit) for unit in sent] for sent in units]
[['Жили', 'были', 'дед', 'да', 'баба'], ['Во', 'первых', 'кот', 'спит']]
[['Жили-были', 'дед', 'да', 'баба'], ['Во-первых', 'кот', 'спит']]
Местоимение¶
is_pronoun(word)
Проверяет, является ли слово местоимением по разметке ruMorph: PRON (он, себя, кто) или DET (этот, который, мой, весь).
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
word |
str |
- | Слово |
Знаменательное слово¶
is_content_word(word)
Проверяет, является ли слово знаменательным по разметке ruMorph: часть речи из CONTENT_UD_POS (существительные, имена собственные, прилагательные, глаголы во всех формах, наречия), кроме местоименных (PronType Dem, Int, Rel: там, где, почему; ruts.utils.is_pronominal), вводных (помета Prnt) слов, предикативов (надо, можно) и чисел цифрами.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
word |
str |
- | Слово |