Компоненты¶
Набор модулей для создания компонентов spaCy. Каждый модуль представляет собой класс с двумя реализованными методами: __init__ (добавляет новое расширение в пайплайн при инициализации) и __call__ (принимает объект класса Doc и возвращает его модифицированную версию).
Примечание
Подробную информацию о разработке пользовательских компонентов для spaCy можно узнать в соответствующем разделе документации. Примеры ниже используют модель ru_core_news_sm, которая ставится отдельно: python -m spacy download ru_core_news_sm (см. установку).
Сериализация
Компоненты кладут в doc._.<name> объект класса статистик, который spaCy сериализовать не умеет: Doc.to_bytes(), DocBin(store_user_data=True) и nlp.pipe(..., n_process>1) с такими компонентами завершатся ошибкой. Для сохранения документа исключайте пользовательские данные (doc.to_bytes(exclude=["user_data"])) или сохраняйте doc._.<name>.get_stats() отдельно; для многопроцессной обработки считайте статистики в основном процессе после nlp.pipe без компонентов ruTS.
BasicStatsComponent¶
ruts.components.BasicStatsComponent
Модуль для компонента основных текстовых статистик.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
nlp |
Language | - |
Объект класса Language |
name |
str | "basic" |
Наименование компонента в пайплайне |
Пример использования:
Пример
Код:
# Загрузка библиотек
import ruts
import spacy
# Загрузка модели spaCy
nlp = spacy.load("ru_core_news_sm")
# Добавление компонента
nlp.add_pipe("basic", last=True)
# Доступ к посчитанным метрикам
doc = nlp("мама мыла раму")
doc._.basic.c_letters
Результат:
{4: 3}
MorphStatsComponent¶
ruts.components.MorphStatsComponent
Модуль для компонента морфологических статистик текста. Части речи и признаки берутся из разметки модели (token.pos_, token.morph), в пайплайне без теггера - из pymorphy3.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
nlp |
Language | - |
Объект класса Language |
name |
str | "morph" |
Наименование компонента в пайплайне |
Пример использования:
Пример
Код:
# Загрузка библиотек
import ruts
import spacy
# Загрузка модели spaCy
nlp = spacy.load("ru_core_news_sm")
# Добавление компонента
nlp.add_pipe("morph", last=True)
# Доступ к посчитанным метрикам
doc = nlp("мама мыла раму")
doc._.morph.case
Результат:
('Nom', None, 'Acc')
ReadabilityStatsComponent¶
ruts.components.ReadabilityStatsComponent
Модуль для компонента основных метрик удобочитаемости текста.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
nlp |
Language | - |
Объект класса Language |
name |
str | "readability" |
Наименование компонента в пайплайне |
preset |
str | "plainrussian" |
Пресет коэффициентов (plainrussian, fiction, academic) |
Пример использования:
Пример
Код:
# Загрузка библиотек
import ruts
import spacy
# Загрузка модели spaCy
nlp = spacy.load("ru_core_news_sm")
# Добавление компонента
nlp.add_pipe("readability", last=True)
# Доступ к посчитанным метрикам
doc = nlp("мама мыла раму")
doc._.readability.flesch_reading_easy
Результат:
82.735
Пресет коэффициентов передается через config:
Пример
nlp.add_pipe("readability", config={"preset": "fiction"}, last=True)
DiversityStatsComponent¶
ruts.components.DiversityStatsComponent
Модуль для компонента основных метрик лексического разнообразия текста.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
nlp |
Language | - |
Объект класса Language |
name |
str | "diversity" |
Наименование компонента в пайплайне |
window_len |
int | 50 |
Размер окна для MATTR и сегмента для MSTTR |
mtld_threshold |
float | 0.72 |
Порог TTR для MTLD, MA-MTLD и MTLD-W |
mtld_min_len |
int | 10 |
Минимальная длина фактора для MTLD, MA-MTLD и MTLD-W |
hdd_sample_size |
int | 42 |
Размер выборки для HD-D |
log_base |
float | 10 |
Основание логарифма для метрик Summer, Maas и Dugast |
Пример использования:
Пример
Код:
# Загрузка библиотек
import ruts
import spacy
# Загрузка модели spaCy
nlp = spacy.load("ru_core_news_sm")
# Добавление компонента
nlp.add_pipe("diversity", last=True)
# Доступ к посчитанным метрикам
doc = nlp("мама мыла раму")
doc._.diversity.rttr
Результат:
1.7320508075688774
Окна, пороги и основание логарифма передаются через config:
Пример
nlp.add_pipe("diversity", config={"window_len": 100, "log_base": 2.718281828459045}, last=True)
StyleStatsComponent¶
ruts.components.StyleStatsComponent
Модуль для компонента SEO-метрик стиля текста.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
nlp |
Language | - |
Объект класса Language |
name |
str | "style" |
Наименование компонента в пайплайне |
stopwords |
list[str] | None |
Список стоп-слов для водности; если не задан, используется разметка pymorphy3 |
top_n |
int | 10 |
Количество самых частых слов для академической тошноты и естественности по Ципфу |
Пример использования:
Пример
Код:
# Загрузка библиотек
import ruts
import spacy
# Загрузка модели spaCy
nlp = spacy.load("ru_core_news_sm")
# Добавление компонента
nlp.add_pipe("style", last=True)
# Доступ к посчитанным метрикам
doc = nlp("мама мыла раму")
doc._.style.water
Результат:
0.0
Список стоп-слов и количество самых частых слов передаются через config:
Пример
nlp.add_pipe("style", config={"stopwords": ["и", "в", "не"], "top_n": 5}, last=True)
PhonStatsComponent¶
ruts.components.PhonStatsComponent
Модуль для компонента фоностатистик текста.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
nlp |
Language | - |
Объект класса Language |
name |
str | "phon" |
Наименование компонента в пайплайне |
window_len |
int | 3 |
Размер окна в словах для аллитерации и ассонанса |
Пример использования:
Пример
Код:
# Загрузка библиотек
import ruts
import spacy
# Загрузка модели spaCy
nlp = spacy.load("ru_core_news_sm")
# Добавление компонента
nlp.add_pipe("phon", last=True)
# Доступ к посчитанным статистикам
doc = nlp("мама мыла раму")
doc._.phon.p_open_syllables
Результат:
1.0
Размер окна передается через config:
Пример
nlp.add_pipe("phon", config={"window_len": 5}, last=True)
SyntaxStatsComponent¶
ruts.components.SyntaxStatsComponent
Модуль для компонента синтаксических статистик текста. Компонент работает по дереву зависимостей, поэтому в пайплайне должен быть парсер: модели ru_core_news_sm, ru_core_news_md или ru_core_news_lg; в пайплайне без парсера компонент вызывает исключение SourceError.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
nlp |
Language | - |
Объект класса Language |
name |
str | "syntax" |
Наименование компонента в пайплайне |
Пример использования:
Пример
Код:
# Загрузка библиотек
import ruts
import spacy
# Загрузка модели spaCy
nlp = spacy.load("ru_core_news_sm")
# Добавление компонента
nlp.add_pipe("syntax", last=True)
# Доступ к посчитанным статистикам
doc = nlp("Дом, построенный рабочими в прошлом году, был продан")
doc._.syntax.tree_depth
Результат:
4.0
CohesionStatsComponent¶
ruts.components.CohesionStatsComponent
Модуль для компонента статистик связности текста. Компоненту нужны только границы предложений (модель или sentencizer); при наличии разметки части речи берутся из нее, леммы - из pymorphy3 по части речи токена.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
nlp |
Language | - |
Объект класса Language |
name |
str | "cohesion" |
Наименование компонента в пайплайне |
Пример использования:
Пример
Код:
# Загрузка библиотек
import ruts
import spacy
# Загрузка модели spaCy
nlp = spacy.load("ru_core_news_sm")
# Добавление компонента
nlp.add_pipe("cohesion", last=True)
# Доступ к посчитанным статистикам
doc = nlp("Кот сидел на окне. Он смотрел на птиц. Птицы улетели, и кот уснул.")
doc._.cohesion.noun_overlap_adjacent
Результат:
0.5
LexicalStatsComponent¶
ruts.components.LexicalStatsComponent
Модуль для компонента статистик лексической сложности текста. Метрики по частотному словарю требуют загруженного FreqDict, полосы и лексическая плотность считаются без него.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
nlp |
Language | - |
Объект класса Language |
name |
str | "lexical" |
Наименование компонента в пайплайне |
data_dir |
str | None |
Путь к директории с частотным словарем; если не задан, используется директория по умолчанию |
Пример использования:
Пример
Код:
# Загрузка библиотек
import ruts
import spacy
# Загрузка модели spaCy
nlp = spacy.load("ru_core_news_sm")
# Добавление компонента
nlp.add_pipe("lexical", last=True)
# Доступ к посчитанным статистикам
doc = nlp("Кот сидел на окне и смотрел на птиц")
doc._.lexical.p_top1000
Результат:
0.75
Директория со словарем передается через config:
Пример
nlp.add_pipe("lexical", config={"data_dir": "/path/to/dicts"}, last=True)
VerseStatsComponent¶
ruts.components.VerseStatsComponent
Модуль для компонента стиховедческих статистик текста. Требует загруженного словаря ударений StressDict; компонент работает по тексту Doc с переносами строк, поэтому текст стихотворения нужно передавать в nlp как есть, не склеивая строки. Текст с буквами, но без русских слов дает пустые статистики, как VerseStats, и nlp.pipe по корпусу на нем не прерывается.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
nlp |
Language | - |
Объект класса Language |
name |
str | "verse" |
Наименование компонента в пайплайне |
data_dir |
str | None |
Путь к директории со словарем ударений; если не задан, используется директория по умолчанию |
Пример использования:
Пример
Код:
# Загрузка библиотек
import ruts
import spacy
# Загрузка модели spaCy
nlp = spacy.load("ru_core_news_sm")
# Добавление компонента
nlp.add_pipe("verse", last=True)
# Доступ к посчитанным статистикам
doc = nlp(
"Буря мглою небо кроет,\nВихри снежные крутя;\nТо, как зверь, она завоет,\nТо заплачет, как дитя"
)
doc._.verse.meter, doc._.verse.n_feet
Результат:
('хорей', 4)
Директория со словарем передается через config:
Пример
nlp.add_pipe("verse", config={"data_dir": "/path/to/dicts"}, last=True)