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

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

Классическая тошнота

ruts.style_stats.calc_classic_nausea()

Вычисление классической тошноты (Advego) - квадратного корня из количества вхождений самого частого слова. Характеризует навязчивость одного слова без учета длины текста, поэтому растет вместе с текстом. Норма Advego - не больше 7, на практике 1-5.

Формула:

\[ \sqrt{\max_k n_k} \]

где \(n_k\) - количество вхождений слова \(k\).

Параметры:

Параметр Тип По умолчанию Описание
text list[str] - Список слов

Академическая тошнота

ruts.style_stats.calc_academic_nausea()

Вычисление академической тошноты (Advego) - доли вхождений самых частых слов в тексте в процентах. Точная формула Advego не опубликована, реализовано как суммарная частота top_n самых частых слов, деленная на количество слов. Норма Advego - 5-15%.

Формула:

\[ 100\times\frac{\sum_{k \in \textrm{top}_n} n_k}{N} \]

Параметры:

Параметр Тип По умолчанию Описание
text list[str] - Список слов
top_n int 10 Количество самых частых слов

Водность

ruts.style_stats.calc_water()

Вычисление водности (Text.ru) - доли незначимых слов в тексте в процентах. Незначимыми считаются стоп-слова: союзы, частицы, предлоги, местоимения-существительные, междометия, предикативы (нет, надо, можно), местоименные прилагательные (этот, такой, который, весь), вводные слова (конечно, например), указательные (там, тогда) и вопросительные (где, почему) наречия по разметке pymorphy3 (функция is_stopword) или слова из переданного списка стоп-слов.

Нормы Text.ru: до 15% - естественное содержание, 15-30% - избыточное, больше 30% - высокое.

Примечание

«Вода» Advego - другой показатель с нормой 55-75%, здесь он не реализован.

Формула:

\[ 100\times\frac{\textrm{Количество стоп-слов}}{\textrm{Количество слов}} \]

Параметры:

Параметр Тип По умолчанию Описание
text list[str] - Список слов
stopwords list[str] None Список стоп-слов; если не задан, используется разметка pymorphy3

Стоп-слово

ruts.style_stats.is_stopword()

Проверка, является ли слово стоп-словом по части речи. Стоп-словами считаются слова с частью речи CONJ, PRCL, PREP, NPRO, INTJ, PRED или с граммемами Apro, Prnt, Dmns, Ques по разметке pymorphy3; наборы заданы в ruts.constants.STOPWORD_POS и ruts.constants.STOPWORD_GRAMMEMES. Результаты разбора кэшируются.

Параметры:

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

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

ruts.style_stats.calc_spam()

Вычисление заспамленности (Text.ru) - доли повторов слов в тексте в процентах. Каждое вхождение слова, кроме первого, считается повтором, поэтому заспамленность равна \(100\times(1 - \textrm{TTR})\). Для расчета по леммам извлекайте слова с лемматизацией.

Нормы Text.ru: до 30% - естественное содержание, 30-60% - SEO-оптимизированный текст, больше 60% - заспамленный текст.

Формула:

\[ 100\times\frac{N - V}{N} \]

где \(N\) - количество слов, \(V\) - количество лексем.

Параметры:

Параметр Тип По умолчанию Описание
text list[str] - Список слов

Естественность по Ципфу

ruts.style_stats.calc_zipf_naturalness()

Вычисление естественности текста по закону Ципфа (pr-cy, megaindex) - согласия частот самых частых слов с идеальным распределением \(f_r = f_1 / r\), где \(f_1\) - частота самого частого слова, \(r\) - ранг слова. Считается как \(100\times(1 - \bar{d})\), где \(\bar{d}\) - среднее относительное отклонение частот от идеальных по рангам от 2 до \(n = \min(\textrm{top}_n, V, f_1)\): ранг 1 совпадает с идеалом по построению, а при рангах больше \(f_1\) идеальная частота меньше единицы и отклонение гапаксов растет без ограничения. Отрицательные значения обрезаются до 0. Норма сервисов - не меньше 50%.

Предупреждение

Если рангов для сравнения нет (все слова - гапаксы, одна лексема или top_n меньше 2), функция возвращает nan.

Формула:

\[ 100\times\left(1-\frac{1}{n-1}\sum_{r=2}^{n}\frac{|f_r - f_1 / r|}{f_1 / r}\right) \]

Параметры:

Параметр Тип По умолчанию Описание
text list[str] - Список слов
top_n int 10 Количество самых частых слов

Плотность ключевых слов

ruts.style_stats.calc_keyword_density()

Вычисление плотности ключевых слов (Text.ru, Тургенев) - частоты каждого ключевого слова на 100 слов текста. Ключевая фраза из нескольких слов через пробел ищется как последовательность слов, вхождения фраз могут пересекаться. Слова сравниваются без учета регистра; для сравнения по леммам извлекайте слова с лемматизацией и передавайте леммы.

Формула:

\[ 100\times\frac{\textrm{Количество вхождений ключевого слова}}{\textrm{Количество слов}} \]

Параметры:

Параметр Тип По умолчанию Описание
text list[str] - Список слов
keywords list[str] - Ключевые слова или фразы