Skip to content

Latest commit

 

History

History
232 lines (161 loc) · 8.45 KB

File metadata and controls

232 lines (161 loc) · 8.45 KB

EpubToSplitTxt

.NET C# License

Система конвертации Epub в текст и разделения на главы

Конвертация электронных книг формата .epub в текст и интеллектуальное разделение на отдельные TXT файлы по главам

English | 中文 | Русский | 한국어 | 日本語


✨ Возможности

  • ✅ Автоматический парсинг структуры Epub файлов и извлечение текста
  • ✅ Интеллектуальное распознавание заголовков глав (поддержка китайского и английского форматов)
  • ✅ Разделение по главам в отдельные TXT файлы с нумерацией для сохранения порядка чтения
  • ✅ Поддержка специальных глав: предисловие, пролог и т.д.
  • ✅ Вывод в UTF-8 без BOM для совместимости
  • ✅ Потоковая обработка больших файлов с низким потреблением памяти
  • ✅ Настраиваемые правила сопоставления глав

🛠️ Технологии

Библиотека Версия Назначение
.NET 9.0 Среда выполнения
VersOne.Epub 3.3.0 Парсинг Epub файлов
HtmlAgilityPack 1.11.59 Очистка HTML контента
Microsoft.Extensions.Configuration - Управление конфигурацией

🚀 Быстрый старт

1. Сборка проекта

dotnet build

2. Подготовка Epub файлов

Поместите ваши .epub файлы в директорию RawEpub:

EpubToSplitTxt/
├── RawEpub/
│   ├── Роман1.epub
│   └── Роман2.epub

3. Запуск программы

dotnet run

4. Просмотр результатов

Программа автоматически создаст следующую структуру директорий:

EpubToSplitTxt/
├── IntermediateTxt/          # Промежуточные файлы (полный текст)
│   ├── Роман1_Полный.txt
│   └── Роман2_Полный.txt
├── SplitOutput/              # Разделенные главы
│   ├── Роман1/
│   │   ├── 000_Пролог.txt
│   │   ├── 001_Глава1_Перерождение.txt
│   │   ├── 002_Глава2_Тренировка.txt
│   │   └── ...
│   └── Роман2/
│       └── ...

⚙️ Конфигурация

Файл конфигурации: appsettings.json

{
  "Splitter": {
    "ChapterRegex": "(^第[0-9一二三四五六七八九十百千]+[章节卷].*)|(^Chapter [0-9]+.*)|(^序章.*)|(^楔子.*)|(^引子.*)|(^后记.*)|(^尾声.*)",
    "MinChapterLength": 100
  },
  "Paths": {
    "RawEpubFolder": "./RawEpub",
    "IntermediateTxtFolder": "./IntermediateTxt",
    "SplitOutputFolder": "./SplitOutput"
  }
}

Параметры конфигурации

Параметр Описание По умолчанию
Splitter:ChapterRegex Регулярное выражение для сопоставления заголовков глав Поддержка китайских/арабских цифр и т.д.
Splitter:MinChapterLength Минимальное количество символов в главе (предупреждение если меньше) 100
Paths:RawEpubFolder Директория исходных Epub файлов ./RawEpub
Paths:IntermediateTxtFolder Директория промежуточных файлов ./IntermediateTxt
Paths:SplitOutputFolder Директория выходных файлов ./SplitOutput

📑 Поддерживаемые форматы глав

Поддерживаемые по умолчанию форматы заголовков глав:

  • ✅ Китайские числа: 第一章, 第二十章, 第一百章
  • ✅ Арабские числа: 第1章, 第001章
  • ✅ Английский формат: Chapter 1, Chapter 2
  • ✅ Специальные главы: 序章, 楔子, 引子, 后记, 尾声

Для поддержки других форматов измените ChapterRegex в appsettings.json.


📊 Процесс обработки

[Epub файл]
    ↓
[EpubConverter] Парсинг структуры Epub
    ↓
[Очистка HTML] Удаление тегов, конвертация сущностей
    ↓
[Полный текст] Объединение в один TXT файл
    ↓
[TextSplitter] Сканирование строк и сопоставление глав
    ↓
[Файлы глав] Вывод отдельных файлов с нумерацией

📝 Описание логов

  • [INFO]: Нормальная информация (прогресс парсинга, статистика)
  • [WARN]: Предупреждения (глава слишком мала, главы не найдены и т.д.)
  • [ERROR]: Ошибки (поврежденный файл, ошибки I/O и т.д.)

⚡ Оптимизация производительности

  • ✅ Предкомпилированные регулярные выражения (RegexOptions.Compiled)
  • ✅ Потоковое чтение больших файлов (StreamReader)
  • ✅ Избегание загрузки всего текста в память сразу
  • ✅ UTF-8 без BOM для уменьшения размера файла

⚠️ Примечания

  1. Кодировка: Все выходные файлы используют UTF-8 без BOM
  2. Имена файлов: Автоматическая очистка недопустимых символов, замена на подчеркивания
  3. Структура директорий: Создание отдельной папки для каждой книги
  4. Таймаут regex: Сопоставление глав имеет таймаут 1 секунда для предотвращения зацикливания

🏗️ Архитектура системы

Основные компоненты

  • EpubConverter: Парсинг Epub файлов и извлечение текста
  • TextSplitter: Распознавание глав и разделение текста
  • AppSettings: Модель управления конфигурацией

Зависимости

Program.cs
   ├── EpubConverter (VersOne.Epub, HtmlAgilityPack)
   ├── TextSplitter (System.Text.RegularExpressions)
   └── AppSettings (Microsoft.Extensions.Configuration)

🔧 Расширение

Пользовательские правила сопоставления глав

Измените регулярное выражение в appsettings.json:

{
  "Splitter": {
    "ChapterRegex": "Ваше пользовательское выражение"
  }
}

Добавление новых форматов вывода

Измените метод SplitTextAsync в TextSplitter.cs для поддержки других форматов (например, Markdown).


📄 Лицензия

Этот проект предназначен только для личного обучения и исследований. Пожалуйста, соблюдайте соответствующие законы об авторском праве.


🤝 Вклад

Приветствуются Issues и Pull Requests!


Made with ❤️ using .NET 9 and VersOne.Epub