Приложение Streamlit для автоматического форматирования академических и юридических документов с поддержкой сносок по ГОСТ.
flowchart LR
UP[Загрузка .docx] --> P[Парсинг документа]
P --> LLM{LLM: поиск цитат}
LLM -->|нашёл| FN[Расстановка сносок<br>по списку литературы]
LLM -->|fallback| RX[Поиск цитат регулярками]
RX --> FN
FN --> FMT[Форматирование по ГОСТ:<br>Times New Roman 14, интервал 1.5,<br>отступы, выравнивание]
FMT --> OUT[Готовый .docx]
Практическая задача: студенты, аспиранты и юристы тратят часы на ручное оформление документов по ГОСТ — приложение делает это за минуты, а LLM находит неоформленные цитаты, которые человек пропускает.
| Компонент | Статус |
|---|---|
| Форматирование по ГОСТ (шрифт 14, по ширине, интервал 1.5, отступы) | ✅ проверено тестами |
Поиск цитат (Фамилия, Год, с. N) регулярками |
✅ проверено тестами |
| Поиск цитат через LLM | |
| Вставка сносок (bayoo-docx) | bayoo-docx; с обычным python-docx не работает |
Нашли проблему — создайте issue.
- Загрузка документов в формате
.docx - Автоматическое форматирование основного текста:
- Шрифт Times New Roman, размер 14 пт
- Выравнивание по ширине
- Межстрочный интервал 1.5
- Отступ первой строки (настраиваемый, сейчас 1.5 см)
- Поиск цитат и добавление сносок:
- Использование LLM (сейчас GPT-4, ранее пробовали Gemini) через прокси-сервер (задается в
.env) для поиска цитат по списку литературы, введенному вручную. - Резервный поиск цитат с помощью регулярных выражений, если список литературы извлекается из текста.
- Форматирование сносок (шрифт 10 пт, интервал 1.0) с использованием библиотеки
bayoo-docx.
- Использование LLM (сейчас GPT-4, ранее пробовали Gemini) через прокси-сервер (задается в
- Веб-интерфейс на Streamlit для загрузки файла и ввода/просмотра списка литературы.
-
Клонируйте репозиторий:
git clone https://github.com/DmitriiSednev/Automatic-text-formatting.git cd Automatic-text-formatting -
Создайте виртуальное окружение и активируйте его:
python -m venv .venv # Windows .venv\Scripts\activate # Linux/Mac source .venv/bin/activate
-
Установите зависимости (рекомендуется Python 3.11–3.12):
pip install -r requirements.txt
⚠️ Для сносок используетсяbayoo-docx— форкpython-docxс поддержкой footnotes. Не устанавливайте обычныйpython-docxв то же окружение: пакеты конфликтуют (оба занимают модульdocx), и сноски перестанут работать. -
Создайте файл
.envв корневой директории проекта:# Можно скопировать .env.example (если он есть) или создать вручную # Пример содержимого .env: API_KEY="sk-ваш_ключ_api" BASE_URL="https://адрес_вашего_прокси" # Например, https://proxy.merkulov.ai
Убедитесь, что в файле указаны
API_KEY(для доступа к LLM через прокси) иBASE_URL(адрес самого прокси-сервера).
-
Запустите приложение Streamlit:
python -m streamlit run app.py
-
Откройте браузер по указанному адресу (обычно
http://localhost:8501). -
Загрузите документ
.docx. -
При необходимости отметьте галочку "Ввести/редактировать источники вручную" и вставьте/отредактируйте список литературы (каждый источник с новой строки, по ГОСТ для сносок). Если источники не введены вручную, скрипт попытается извлечь их из документа.
-
Нажмите "Обработать документ".
-
Дождитесь завершения обработки и скачайте отформатированный документ.
- Python 3.8+
- Зависимости, перечисленные в
requirements.txt
- Зависимости: Возможны предупреждения о конфликтах версий пакетов (например, между
grpcio-statusиprotobuf). Текущая конфигурация (protobuf==3.20.3) выбрана для совместимости со Streamlit и должна работать, несмотря на предупреждение. - LLM через прокси: Стабильность работы LLM (особенно Gemini) через прокси может зависеть от доступности и конфигурации прокси-сервера. Текущая реализация использует GPT-4.
- Форматирование сносок: Используется библиотека
bayoo-docx, которая может иметь свои особенности в обработке сложных документов.