diff --git a/README.md b/README.md index 6ff87c9..1dcdb5b 100644 --- a/README.md +++ b/README.md @@ -1 +1,171 @@ -# my_converterbot \ No newline at end of file +# πŸ“„ My Converter Bot + +[![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)](https://www.python.org/) +[![aiogram](https://img.shields.io/badge/aiogram-3.x-00ADD8.svg)](https://docs.aiogram.dev/) +[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) + +Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌ-Π±ΠΎΡ‚ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ форматирования ΠΏΠΎ Π“ΠžΠ‘Π’ 7.32-2017 ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° структуры ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². + +## 🎯 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности + +### ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΡ Markdown β†’ DOCX +- **Полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π“ΠžΠ‘Π’ 7.32-2017**: автоматичСскоС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°ΡƒΡ‡Π½ΠΎ-тСхничСской Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ +- **Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° синтаксиса**: Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, списки, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° +- **АвтоматичСская нумСрация**: иСрархичСская нумСрация Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² (1.1.1, 1.1.2) +- **Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сносками**: интСграция footnotes с автоматичСским Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ +- **НастраиваСмая Ρ‚ΠΈΠΏΠΎΠ³Ρ€Π°Ρ„ΠΈΠΊΠ°**: Times New Roman 14pt, мСТстрочный ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» 1.5 + +### Анализ Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² β†’ TXT +- **ДрСвовидная визуализация**: полная структура ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с UTF-8 ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ +- **Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ содСрТимого**: автоматичСский экспорт ΠΊΠΎΠ΄Π° ΠΈΠ· всСх тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ² +- **Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ**: ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ слуТСбных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ (node_modules, __pycache__) +- **ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²**: Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ гСнСрация placeholder для ΠΌΠ΅Π΄ΠΈΠ° + +## πŸ”§ ВСхнологичСский стСк + +| ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ | ВСхнология | НазначСниС | +|-----------|------------|------------| +| **Bot Framework** | aiogram 3.x | Асинхронная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Telegram API | +| **Document Processing** | python-docx | ГСнСрация DOCX с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ стилями | +| **Parsing Engine** | re (regex) | ΠŸΠ°Ρ€ΡΠΈΠ½Π³ Markdown синтаксиса | +| **Archive Handling** | zipfile | Распаковка ΠΈ Π°Π½Π°Π»ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² | +| **Async Runtime** | asyncio | ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° запросов | + +## πŸ“¦ Установка ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ + +### БистСмныС трСбования +- Python 3.10 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ +- pip package manager +- Telegram Bot Token (ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρƒ [@BotFather](https://t.me/botfather)) + +### ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° установки + +```bash +# ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСпозитория +git clone https://github.com/EDeev/my_converterbot.git +cd my_converterbot + +# Установка зависимостСй +pip install -r requirements.txt + +# ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Ρ‚ΠΎΠΊΠ΅Π½Π° +# ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ bot.py, установитС ваш BOT_TOKEN +# BOT_TOKEN = "your_telegram_bot_token_here" + +# Запуск Π±ΠΎΡ‚Π° +python bot.py +``` + +## πŸš€ ИспользованиС + +### Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ +- `/start` β€” инициализация ΠΈ привСтствСнноС сообщСниС +- `/help` β€” Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π°Ρ докумСнтация ΠΏΠΎ функциям + +### Π Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс + +#### Markdown β†’ DOCX конвСртация +1. ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ `.md` Ρ„Π°ΠΉΠ» Π±ΠΎΡ‚Ρƒ +2. БистСма автоматичСски ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ Π“ΠžΠ‘Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ +3. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ `.docx` Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ + +**ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Markdown:** +```markdown +# Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ + +Основной тСкст с **ΠΆΠΈΡ€Π½Ρ‹ΠΌ** ΠΈ *курсивным* Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ[^1]. + +## 1. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ + +- ΠŸΡƒΠ½ΠΊΡ‚ списка 1 +- ΠŸΡƒΠ½ΠΊΡ‚ списка 2 + +[^1]: ВСкст сноски +``` + +#### ZIP β†’ TXT Π°Π½Π°Π»ΠΈΠ· +1. ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ `.zip` Π°Ρ€Ρ…ΠΈΠ² с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ +2. Π‘ΠΎΡ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚ ΠΈ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ структуру +3. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ `project_structure.txt` с ΠΏΠΎΠ»Π½Ρ‹ΠΌ содСрТимым + +## βš™οΈ АрхитСктурныС особСнности + +### ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ структура + +``` +my_converterbot/ +β”œβ”€β”€ bot.py # Основной ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Telegram Π±ΠΎΡ‚Π° +β”œβ”€β”€ md_to_docx.py # ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€ Markdown с Π“ΠžΠ‘Π’ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ +β”œβ”€β”€ rep_to_txt.py # Анализатор ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹Ρ… структур +β”œβ”€β”€ requirements.txt # БпСцификация зависимостСй +└── README.md # ВСкущая докумСнтация +``` + +### DocumentSettings: ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΠ°Ρ конфигурация + +Класс `DocumentSettings` обСспСчиваСт гранулярноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅: +- Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² (14pt основной тСкст, 16pt Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня) +- ΠžΡ‚ΡΡ‚ΡƒΠΏΡ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (Π»Π΅Π²Ρ‹ΠΉ: 3.0 см для ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π΅Ρ‚Π°) +- Π Π΅ΠΆΠΈΠΌΡ‹ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ (decimal: 1.1.1 ΠΈΠ»ΠΈ simple: 1) +- ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² страниц + +### Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° + +**Алгоритм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ списков:** +- РаспознаваниС влоТСнности Ρ‡Π΅Ρ€Π΅Π· отступы +- АвтоматичСская Π·Π°ΠΌΠ΅Π½Π° bullet points Π½Π° Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ Ρ‚ΠΈΡ€Π΅ (Π“ΠžΠ‘Π’) +- Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ иСрархичСской структуры + +**БистСма ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сносок:** +- Inline ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ `[^1]` β†’ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ индСкс Π² тСкстС +- АвтоматичСская агрСгация ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ +- Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Ρ†Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ + +## πŸ”’ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΈ constraints + +- **ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°**: 20 ΠœΠ‘ (Telegram API limitation) +- **ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…**: `.md`, `.zip` +- **ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ**: UTF-8, UTF-8-sig, CP1251, Latin1 (fallback Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°) + +## πŸ“Š ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ + +- **ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Markdown**: ~0.5-2 сСк для Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎ 50 страниц +- **Анализ ZIP Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ²**: ~1-5 сСк для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π΄ΠΎ 1000 Ρ„Π°ΠΉΠ»ΠΎΠ² +- **ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°**: Π΄ΠΎ 10 ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… запросов + +## πŸ› οΈ Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ + +### ΠšΠ°ΡΡ‚ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π“ΠžΠ‘Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² + +```python +from md_to_docx import MarkdownToDocxConverter, DocumentSettings + +settings = DocumentSettings() +settings.font_name = "Times New Roman" +settings.font_size = 14 +settings.line_spacing = 1.5 +settings.margin_left = 3.0 +settings.auto_numbering_headings = True +settings.numbering_format = "decimal" + +converter = MarkdownToDocxConverter(settings) +converter.convert("input.md", "output.docx") +``` + +## πŸ“„ ЛицСнзия + +Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ являСтся нСкоммСрчСским ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT. + +## πŸ‘¨β€πŸ’» Автор + +**Π”Π΅Π΅Π² Π•Π³ΠΎΡ€ Π’ΠΈΠΊΡ‚ΠΎΡ€ΠΎΠ²ΠΈΡ‡** - Backend Developer +- GitHub: [@EDeev](https://github.com/EDeev) +- Email: egor@deev.space +- Telegram: [@Egor_Deev](https://t.me/Egor_Deev) + +--- + +
+ ⭐ Если ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ оказался ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΡƒ Π½Π° GitHub! +

Π‘ΠΎΠ·Π΄Π°Π½ΠΎ с ❀️ ΠΎΡ‚ вашСго Π΄ΠΎΡ€ΠΎΠ³ΠΎΠ³ΠΎ - deev.space Β©

+