multilingual_summarizer
Описание
Репозиторий для проекта по Вайб-кодингу.
Языки
- Python100%
Multilingual Learning Material Summarizer
Инструмент для автоматического резюмирования учебных материалов с поддержкой нескольких языков (English, Russian, German). Проект соответствует идее 2.2 из списка творческих заданий: помогает студентам и преподавателям быстро получать краткие конспекты длинных текстов. [file:4]
Description
Многие учебные тексты (лекции, статьи, методички) слишком большие, чтобы быстро повторить материал перед занятием или экзаменом. Этот проект решает задачу: по входному тексту строится короткое резюме, сохраняющее ключевые мысли.
Возможности:
- Поддержка нескольких языков: английский, русский, немецкий (простое rule‑based определение языка).
- Несколько методов резюмирования:
- frequency — по частотам слов;
- position — по позиции предложений;
- hybrid — комбинация частот и позиции (по умолчанию).
- Гибкий уровень сжатия: от 20% до 90% слов от исходного текста. [file:4]
- CLI‑интерфейс и Python‑API для встраивания в другие приложения.
Installation
Prerequisites
- Python 3.8+
- pip
- Желательно virtualenv (
). [file:6]python -m venv venv
Setup
git clone <ВАШ-URL-РЕПОЗИТОРИЯ> multilingual-summarizer
cd multilingual-summarizer
python -m venv venv
# Windows:
venv\Scripts\activate
# Linux/macOS:
# source venv/bin/activate
pip install -r requirements.txt
Проверка, что всё работает:
pytest tests/ -v
Usage
Базовый пример (CLI)
Запуск из корня проекта:
python -m src.main --input data/samples/sample_en.txt --ratio 30 --stats
Пример ожидаемого вывода:
Artificial Intelligence and Machine Learning in Education Artificial intelligence AI has become one of the most transformative technologies of our time.
============================================================
STATISTICS
============================================================
Language: english
Original words: 84
Summary words: 21
Original sentences: 6
Summary sentences: 1
Actual ratio: 25.0%
Параметры:
— путь к входному--input / -iфайлу (обязательно)..txt— путь к файлу с резюме (если не указан, вывод в консоль).--output / -o— желаемый процент слов от исходного текста (от 20 до 90, по умолчанию 30). [file:4]--ratio / -r—--method / -m,frequencyилиposition(по умолчаниюhybrid).hybrid— вывести статистику (кол-во слов, предложений, фактический процент).--stats / -s
Примеры:
# 30% сжатие, гибридный метод, английский текст
python -m src.main --input data/samples/sample_en.txt --ratio 30 --stats
# 50% сжатие, частотный метод, русский текст
python -m src.main --input data/samples/sample_ru.txt --ratio 50 --method frequency --stats
# Сохранить резюме в файл
python -m src.main \
--input data/samples/sample_en.txt \
--output summary_en_40.txt \
--ratio 40 \
--method hybrid
Программное использование (Python API)
from src.summarizer import TextSummarizer
from src.language_detector import LanguageDetector
text = open("data/samples/sample_en.txt", encoding="utf-8").read()
detector = LanguageDetector()
lang = detector.detect(text)
print("Language:", lang)
summarizer = TextSummarizer(method="hybrid")
summary = summarizer.summarize(text, compression_ratio=30)
print("Summary:")
print(summary)
stats = summarizer.get_statistics(text, summary)
print("Actual ratio:", stats.actual_ratio)
Project Structure
Текущая структура проекта:
.
├── src/ # Исходный код
│ ├── __init__.py # Инициализация пакета
│ ├── main.py # CLI-интерфейс
│ ├── summarizer.py # Алгоритмы резюмирования
│ ├── language_detector.py # Определение языка
│ └── utils.py # Утилиты (очистка, частоты, файлы)
│
├── tests/ # Юнит‑тесты (pytest)
│ ├── __init__.py
│ ├── test_summarizer.py
│ ├── test_language_detector.py
│ └── test_utils.py
│
├── data/
│ └── samples/
│ ├── sample_en.txt # Пример учебного текста на английском
│ └── sample_ru.txt # Пример учебного текста на русском
│
├── .github/
│ └── workflows/ # CI/CD workflows
│ ├── tests.yml # Линтинг + pytest + coverage
│ └── scheduled_summaries.yml # Плановая генерация резюме и upload артефактов
│
├── requirements.txt # Зависимости (pytest, flake8, black, ...)
├── .gitignore # Исключения для git
├── LICENSE # Лицензия MIT
└── README.md
Эта структура соответствует рекомендациям из и (src/, tests/, data/, .github/workflows/). [file:3][file:6]
Requirements
Основные зависимости указаны в :
иpytest— тестирование и покрытие. [file:6]pytest-cov,flake8— проверка стиля и форматирование.black
Для самого суммаризатора используются только стандартные библиотеки Python, без тяжёлых NLP‑пакетов — это упрощает установку и CI.
Testing
Локальный запуск тестов:
pytest tests/ -v
С покрытием:
pytest tests/ -v --cov=src --cov-report=term-missing
В тестах проверяются:
- корректность очистки текста, разбиения на предложения и частотных слов;
- работа детектора языка на английском, русском и немецком примерах;
- корректность трёх методов суммаризации и валидации параметров.
CI/CD Workflows
В репозитории настроены два GitVerse Actions workflow:
-
Tests and Code Quality (
).github/workflows/tests.yml
Запускается на каждыйиpushв веткуpull_request.main
Выполняет:- установку зависимостей из
;requirements.txt - проверку стиля кода (
иflake8);black --check - юнит‑тесты с покрытием (
).pytest --cov=src
- установку зависимостей из
-
Daily Sample Summaries (
).github/workflows/scheduled_summaries.yml
Запускается:- автоматически по расписанию (
, каждый день в 07:00 UTC);schedule - вручную через
во вкладке Actions.workflow_dispatch
В workflow: - генерируются резюме для
иdata/samples/sample_en.txtс разными методами и уровнями сжатия;data/samples/sample_ru.txt - результаты сохраняются в папку
;outputs/ - файлы с резюме загружаются как артефакт
, который можно скачать из интерфейса CI.daily-summaries
- автоматически по расписанию (
Contributing
This is a student project. If you want to suggest improvements:
- Fork the repository.
- Create a feature branch (
).git checkout -b feature/my-change - Make your changes and run tests (
).pytest tests/ -v - Open a pull request with a short description of the changes.
License
This project is licensed under the MIT License. See the file for details.
Author
journey_to_the_stars
Пирогов Иван