Russian Texts Statistics (ruTS)¶
ruTS считает по русскому тексту то, для чего обычно приходится собирать несколько разрозненных инструментов: от базовых статистик, удобочитаемости и лексического разнообразия до морфологии, синтаксиса, связности, стилометрии и корпусных мер - по опубликованным формулам, адаптированным для русского языка.
Работать можно как с обычными строками, так и с готовыми Doc-объектами spaCy - каждая статистика доступна и как отдельный класс, и как компонент пайплайна spaCy.
Попробовать без установки можно в демо на Hugging Face Spaces: вставьте текст и получите класс удобочитаемости, метрики, графики и подсветку фрагментов.
Возможности¶
-
Извлечение
Токенизаторы слов, предложений и символьных N-грамм с фильтрами, лемматизацией и N-граммами
-
Слоги и ударение
Деление слов на слоги, количество слогов, ударный слог по словарю и тип окончания
-
Базовые статистики
Количество слов, предложений, знаков препинания, слогов и другие базовые статистики текста
-
Удобочитаемость
Тест Флеша-Кинкайда, индекс SMOG, индекс удобочитаемости LIX и другие метрики с коэффициентами для русского языка, а также формулы других языков с исходными коэффициентами
-
Лексическое разнообразие
Type-Token Ratio, Measure of Textual Lexical Diversity, гапакс-индекс и другие метрики
-
Морфология
Морфологические признаки в терминах Universal Dependencies: часть речи, падеж, наклонение, переходность и другие
-
Стиль
SEO-метрики: тошнота, водность, заспамленность, естественность по Ципфу, плотность ключевых слов
-
Фонетика
Доли классов звуков, консонантные кластеры, аллитерация и ассонанс, слоги
-
Синтаксис
Статистики дерева зависимостей spaCy: длины зависимостей, глубина дерева, сочинительные цепочки, клаузы, индексы L2SCA, обороты, пассив, предложные цепочки и цепочки родительных падежей, порядок слов, схожесть соседних предложений
-
Связность
Повторы существительных, аргументов и знаменательных слов между предложениями и абзацами, данность, темпоральная связность, коннекторы по классам, меж- и внутрипредложенческие
-
Лексическая сложность
Частотность слов по словарю Ляшевской и Шарова, частотные полосы, сюрпризал, лексическая плотность
-
Стиховедение
Ударения по словарю Козиева, метр и число стоп, пиррихии и профиль ударности, схемы рифмовки, окончания и строфы
-
Корпусные меры
Ключевые слова относительно эталонного корпуса или частотного словаря, коллокации, дисперсия слов по частям текста, конкорданс KWIC, меры стилометрии (дельта Барроуза с вариантами и скользящая дельта вдоль текста, Zeta и доли ее маркеров в сегментах, хи-квадрат Килгарриффа, кривая Менденхолла, профиль служебных слов) и сравнение корпусов по всем признакам сразу (критерий Манна-Уитни, d Коэна, дельта Клиффа, бутстрэп-интервалы, AUC)
-
Наборы данных
Советские христоматии по литературе, Полное собрание сочинений И.В. Сталина, Тексты с метками класса, Частотный словарь Ляшевской и Шарова, Корпус русской поэзии, Русская классическая литература, Словарь ударений Козиева
-
Визуализация
Закон Ципфа, литературная дактилоскопия, дерево слов, подсветка текста, корпусные и стилометрические графики, рост словаря и спектр частот, длины предложений
-
Компоненты
Компоненты для встраивания статистик в пайплайны spaCy
-
Исключения
Ошибки одной иерархии, классы которой одновременно встроенные исключения Python
Установка¶
Требуется Python 3.11 или новее.
pip install ruts
Подробнее о зависимостях и установке из репозитория - на странице Установка.
Быстрый старт¶
from ruts import BasicStats, DiversityStats, ReadabilityStats
text = "Существуют три вида лжи: ложь, наглая ложь и статистика"
BasicStats(text).get_stats()
ReadabilityStats(text).flesch_reading_easy
DiversityStats(text).ttr
{'c_letters': {1: 1, 3: 2, 4: 3, 6: 1, 10: 2},
'c_syllables': {1: 5, 2: 1, 3: 1, 4: 2},
'n_sents': 1,
'n_words': 9,
'n_unique_words': 8,
'n_long_words': 3,
'n_complex_words': 2,
'n_simple_words': 7,
'n_monosyllable_words': 5,
'n_polysyllable_words': 4,
'n_chars': 55,
'n_letters': 45,
'n_spaces': 8,
'n_syllables': 18,
'n_punctuations': 2,
'letters_entropy': 2.197159723424149,
'syllables_entropy': 1.6577427265048887,
'c_punctuations': {'comma': 1,
'period': 0,
'question': 0,
'exclamation': 0,
'ellipsis': 0,
'colon': 1,
'semicolon': 0,
'dash': 0,
'hyphen': 0,
'angle_quotes': 0,
'straight_quotes': 0,
'parentheses': 0,
'other': 0}}
74.93500000000003
0.8888888888888888
Любую статистику можно вывести на экран в читаемом виде:
BasicStats(text).print_stats()
Статистика | Значение
---------------------------------------------
Предложения | 1
Слова | 9
Уникальные слова | 8
Длинные слова | 3
Сложные слова | 2
Простые слова | 7
Односложные слова | 5
Многосложные слова | 4
Символы | 55
Буквы | 45
Пробелы | 8
Слоги | 18
Знаки препинания | 2
Энтропия длин слов в буквах (бит) | 2.20
Энтропия длин слов в слогах (бит) | 1.66
Сквозной разбор одного рассказа всеми инструментами библиотеки - в ноутбуке examples/01_text_walkthrough.ipynb, его можно открыть в Colab; остальные ноутбуки - на странице примеров.
Структура проекта
- docs - документация по проекту
- ruts:
- basic_stats.py - базовые текстовые статистики
- cohesion_stats.py - статистики связности текста
- components.py - компоненты spaCy
- constants.py - основные используемые константы
- diversity_stats.py - метрики лексического разнообразия текста
- exceptions.py - исключения библиотеки
- extractors.py - инструменты для извлечения объектов из текста
- lexical_stats.py - статистики лексической сложности текста
- morph_stats.py - морфологические статистики
- phon_stats.py - фоностатистики текста
- readability_stats.py - метрики удобочитаемости текста
- style_stats.py - SEO-метрики стиля текста
- syllables.py - слоги и ударение
- syntax_stats.py - синтаксические статистики текста
- unadapted_readability_stats.py - формулы удобочитаемости других языков
- utils.py - вспомогательные инструменты
- verse_stats.py - стиховедческие статистики: ударения, метр, рифма, строфика
- corpus - корпусные меры:
- collocations.py - коллокации и меры ассоциации
- compare.py - сравнение корпусов по признакам текста
- dispersion.py - дисперсия слов по частям текста
- keyness.py - ключевые слова относительно эталонного корпуса
- kwic.py - конкорданс KWIC
- stylometry.py - дельта Барроуза, Zeta и другие меры стилометрии
- datasets - наборы данных:
- dataset.py - базовый класс для работы с наборами данных
- freq2011.py - частотный словарь Ляшевской и Шарова
- poetry_corpus.py - корпус русской поэзии PoetryCorpus
- russian_literature.py - собрание русской классической литературы RusLit
- sov_chrest_lit.py - советские хрестоматии по литературе
- stalin_works.py - полное собрание сочинений И.В. Сталина
- stress_dict.py - словарь ударений Козиева
- texts_by_grade.py - тексты с метками класса проекта Plain Russian Language
- resources - вшитые лексические ресурсы (список самых частых лемм, словарь коннекторов)
- visualizers - инструменты для визуализации текстов:
- corpus.py - Лексическая дисперсия, ключевые слова, сеть коллокаций
- fingerprinting.py - Литературная дактилоскопия
- highlight.py - Подсветка текста
- sentences.py - Длины предложений
- stylometry.py - Дендрограмма, главные компоненты, шкалирование, расстояния внутри и между авторами, скользящая дельта, маркеры Zeta, кривые Менденхолла
- vocabulary.py - Закон Хипса и спектр частот
- word_tree.py - Дерево слов
- zipf.py - Закон Ципфа
- tests - тесты, повторяющие структуру пакета
- scripts - скрипт загрузки страниц документации anyTS
- examples - ноутбуки с примерами
- demo - демонстрация на Gradio для Hugging Face Spaces