Проект представляет собой инструмент для автоматического анализа членов предложения в текстах на русском языке с использованием модели BERT.
Приложение позволяет:
- Автоматически определять члены предложения (подлежащее, сказуемое, определение, дополнение, обстоятельство)
- Обрабатывать текст как в пакетном режиме, так и в интерактивном
- Визуализировать результаты анализа через графический интерфейс (GUI)
- Сохранять результаты обработки
├── src/
│ ├── back/ # Бэкенд: логика анализа
│ │ ├── bert_onnx_inference.* # ONNX-инференс модели BERT
│ │ ├── simple_tokenizer.* # Токенизатор
│ │ ├── statistics.* # Сбор статистики
│ │ ├── save_result.* # Сохранение результатов
│ │ ├── text_splitter.* # Разбиение текста на предложения
│ │ ├── unistring.* # Работа с Unicode строками
│ │ ├── onnx_model.* # Обёртка над ONNX моделью
│ │ └── cJSON.* # JSON парсер (C библиотека)
│ └── front/ # Фронтенд: GUI на Qt
│ ├── MainWindow.* # Главное окно приложения
│ ├── InputPage.* # Страница ввода текста
│ ├── ResultPage.* # Страница результатов
│ ├── SearchPage.* # Страница поиска
│ ├── LoadingPage.* # Страница загрузки
│ ├── SearchFilterCore.* # Логика фильтрации поиска
│ └── lib/ # Библиотеки UI компонентов
│ ├── FlowLayout.* # Поток layout для виджетов
│ ├── TextMarkupWidget.* # Виджет разметки текста
│ └── SearchResultsList.*# Список результатов поиска
├── modelling/ # Обучение и подготовка модели
│ ├── main.py # CLI интерфейс для всех операций
│ ├── model.py # Архитектура модели (BERT + CRF)
│ ├── train.py # Скрипт обучения
│ ├── inference.py # Скрипт инференса
│ ├── dataset.py # Классы датасетов
│ ├── config.py # Конфигурация и гиперпараметры
│ ├── metrics.py # Метрики качества
│ ├── prepare_tokenizer.py # Подготовка токенизатора
│ ├── export_vocab.py # Экспорт словаря токенов
│ ├── quantize_model.py # Квантование ONNX модели
│ ├── analyze_attention.py # Анализ внимания модели
│ ├── dataset_generator.py # Генерация датасетов
│ └── data/ # Датасеты для обучения
├── tests/ # Юнит-тесты (Google Test)
│ ├── test_tokenizer.cpp # Тесты токенизатора
│ └── test_statistics.cpp # Тесты статистики
├── resources/ # Ресурсы приложения
│ ├── app.svg # Иконка приложения
│ └── templates/ # HTML шаблоны
├── CMakeLists.txt # Основной файл сборки CMake
├── compile_flags.txt # Флаги компиляции для clangd
├── gui.cpp # Точка входа GUI приложения
└── tui.cpp # Точка входа TUI (консольная версия)
- CMake ≥ 3.16
- C++17 совместимый компилятор (GCC, Clang, MSVC)
- Qt6 (модули Core, Widgets)
- ONNX Runtime (для работы с моделью)
- Google Test (для тестов)
- Python ≥ 3.13
- uv (менеджер пакетов, рекомендуется)
- PyTorch ≥ 2.9
- Transformers ≥ 4.57
- ONNX Runtime ≥ 1.23
- PyTorch CRF ≥ 0.7.2
- NumPy ≥ 2.3
- SciKit-Learn ≥ 1.8
- Matplotlib ≥ 3.10
- Seaborn ≥ 0.13
- NLTK ≥ 3.9
- tqdm ≥ 4.67
# Создание директории сборки
mkdir build && cd build
# Конфигурация
cmake ..
# Сборка
make./TextAnalyzer# TUI версия компилируется вместе с основным проектом через CMake
./TextAnalyzerTUIПосле запуска TUI версии:
- Введите текст для анализа
- Получите результат с разбивкой по членам предложения
- Введите пустую строку для выхода
GUI предоставляет:
- Страница ввода — ввод текста для анализа
- Страница результатов — отображение найденных членов предложения
- Страница поиска — поиск и фильтрация по типам членов предложения
Для обучения собственной модели перейдите в директорию modelling/:
cd modelling
# Установка зависимостей через uv (рекомендуется)
uv sync
# Или через pip
pip install -e .
# Обучение модели
python main.py --train
# Интерактивный режим предсказания
python main.py --predict
# Обработка файла
python main.py --file input.txt --output output.txt
# Показать информацию о проекте
python main.py --info
# Показать список меток
python main.py --labels
# Статистика датасета
python main.py --stats
# Оценка модели на тестовом датасете
python main.py --evaluate --test_data path/to/test/data --output_dir results| Скрипт | Описание |
|---|---|
main.py |
Главный скрипт с CLI для обучения, инференса и оценки |
model.py |
Архитектура нейронной сети (BERT + CRF) |
train.py |
Функции и цикл обучения модели |
inference.py |
Загрузка модели и предсказание на новых данных |
dataset.py |
Классы PyTorch Dataset для загрузки и обработки данных |
config.py |
Конфигурация проекта (пути, гиперпараметры, константы) |
metrics.py |
Метрики качества (accuracy, precision, recall, F1, confusion matrix) |
export_vocab.py |
Экспорт словаря токенов для C++ токенизатора |
quantize_model.py |
Квантование ONNX модели для ускорения инференса |
prepare_tokenizer.py |
Подготовка и сохранение токенизатора |
analyze_attention.py |
Визуализация и анализ внимания (attention weights) |
dataset_generator.py |
Утилиты для генерации и аугментации датасетов |
В директории modelling/data/ находятся следующие файлы:
| Файл | Описание |
|---|---|
dataset.json |
Основной датасет для обучения |
dataset_latest.json |
Последняя версия датасета |
dataset_old.json |
Старая версия датасета (для сравнения) |
dataset_short.json |
Короткая версия для быстрого тестирования |
news.json |
Датасет новостных текстов |
tests/ |
Тестовые данные для валидации |
cd build
cmake .. -DBUILD_TESTS=ON
cmake --build .
ctest| Файл | Описание |
|---|---|
test_tokenizer.cpp |
Юнит-тесты для простого токенизатора |
test_statistics.cpp |
Юнит-тесты для модуля статистики |
Проект использует GitHub Actions для автоматической сборки и тестирования:
| Workflow | Описание |
|---|---|
build.yml |
Автоматическая сборка проекта при push и pull request |
| Тип (EN) | Тип (RU) | Описание |
|---|---|---|
| SUBJECT | Подлежащее | Главный член предложения, обозначающий предмет речи |
| PREDICATE | Сказуемое | Член предложения, обозначающий действие или состояние |
| DEFINITION | Определение | Член предложения, характеризующий предмет |
| ADDITION | Дополнение | Член предложения, обозначающий объект действия |
| ADVERBIAL | Обстоятельство | Член предложения, указывающий на место, время, образ действия |
| O | Не член предложения | Слова, не являющиеся членами предложения |
Словарь токенов для токенизатора (формат BERT). Расположен в корне проекта. Используется C++ токенизатором для совместимости с Python моделью. Для экспорта словаря из модели используйте:
cd modelling
python export_vocab.py| Переменная | Описание | Значение по умолчанию |
|---|---|---|
CMAKE_BUILD_TYPE |
Тип сборки | Release |
BUILD_TESTS |
Сборка тестов | OFF |
Qt6_DIR |
Путь к Qt6 | автоопределение |
- MSVC:
/W3,/O2(Release),/Od(Debug) - GCC/Clang:
-std=c++17,-O2(Release)