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

Russian Texts Statistics (ruTS)

ruTS

ruTS считает по русскому тексту то, для чего обычно приходится собирать несколько разрозненных инструментов: от базовых статистик, удобочитаемости и лексического разнообразия до морфологии, синтаксиса, связности, стилометрии и корпусных мер - по опубликованным формулам, адаптированным для русского языка.

Работать можно как с обычными строками, так и с готовыми Doc-объектами spaCy - каждая статистика доступна и как отдельный класс, и как компонент пайплайна spaCy.

Попробовать без установки можно в демо на Hugging Face Spaces: вставьте текст и получите класс удобочитаемости, метрики, графики и подсветку фрагментов.

Возможности

Установка

Требуется 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