multilingual_summarizer

0

Описание

Репозиторий для проекта по Вайб-кодингу.

Языки

  • Python100%
3 месяца назад
3 месяца назад
3 месяца назад
3 месяца назад
3 месяца назад
3 месяца назад
3 месяца назад
3 месяца назад
README.md

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 (
    python -m venv venv
    ). [file:6]

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
    — путь к файлу с резюме (если не указан, вывод в консоль).
  • --ratio / -r
    — желаемый процент слов от исходного текста (от 20 до 90, по умолчанию 30). [file:4]
  • --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

Эта структура соответствует рекомендациям из

student-guide.md
и
quick-start.md
(src/, tests/, data/, .github/workflows/). [file:3][file:6]

Requirements

Основные зависимости указаны в

requirements.txt
:

  • pytest
    и
    pytest-cov
    — тестирование и покрытие. [file:6]
  • 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
    )
    Запускается:

    • автоматически по расписанию (
      schedule
      , каждый день в 07:00 UTC);
    • вручную через
      workflow_dispatch
      во вкладке Actions.
      В workflow:
    • генерируются резюме для
      data/samples/sample_en.txt
      и
      data/samples/sample_ru.txt
      с разными методами и уровнями сжатия;
    • результаты сохраняются в папку
      outputs/
      ;
    • файлы с резюме загружаются как артефакт
      daily-summaries
      , который можно скачать из интерфейса CI.

Contributing

This is a student project. If you want to suggest improvements:

  1. Fork the repository.
  2. Create a feature branch (
    git checkout -b feature/my-change
    ).
  3. Make your changes and run tests (
    pytest tests/ -v
    ).
  4. Open a pull request with a short description of the changes.

License

This project is licensed under the MIT License. See the

LICENSE
file for details.

Author

journey_to_the_stars

Пирогов Иван