Система конвертации Epub в текст и разделения на главы
Конвертация электронных книг формата .epub в текст и интеллектуальное разделение на отдельные TXT файлы по главам
English | 中文 | Русский | 한국어 | 日本語
- Журнал разработки: Agent&Chat.md
- ✅ Автоматический парсинг структуры Epub файлов и извлечение текста
- ✅ Интеллектуальное распознавание заголовков глав (поддержка китайского и английского форматов)
- ✅ Разделение по главам в отдельные TXT файлы с нумерацией для сохранения порядка чтения
- ✅ Поддержка специальных глав: предисловие, пролог и т.д.
- ✅ Вывод в UTF-8 без BOM для совместимости
- ✅ Потоковая обработка больших файлов с низким потреблением памяти
- ✅ Настраиваемые правила сопоставления глав
| Библиотека | Версия | Назначение |
|---|---|---|
| .NET | 9.0 | Среда выполнения |
| VersOne.Epub | 3.3.0 | Парсинг Epub файлов |
| HtmlAgilityPack | 1.11.59 | Очистка HTML контента |
| Microsoft.Extensions.Configuration | - | Управление конфигурацией |
dotnet buildПоместите ваши .epub файлы в директорию RawEpub:
EpubToSplitTxt/
├── RawEpub/
│ ├── Роман1.epub
│ └── Роман2.epub
dotnet runПрограмма автоматически создаст следующую структуру директорий:
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 для уменьшения размера файла
- Кодировка: Все выходные файлы используют UTF-8 без BOM
- Имена файлов: Автоматическая очистка недопустимых символов, замена на подчеркивания
- Структура директорий: Создание отдельной папки для каждой книги
- Таймаут 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