feat(reader): add PDF reading support with outline chapters, CLI blocks, and noise filtering (task 7)
This commit is contained in:
1 parent
c38b1dae0a
commit
6dcfd59f73
67 files changed
+49444
-40
No files matched your search
@@ -155,22 +155,22 @@
|
||||
|
||||
---
|
||||
|
||||
### 7. 📑 Поддержка чтения PDF (Cisco CCNA, O'Reilly & Tech Books с оглавлением и текстовым слоем)
|
||||
- [ ] **Легковесный Pure-Python парсер (`pypdf`, Zero C-Dependency)**:
|
||||
### 7. 📑 Поддержка чтения PDF (Cisco CCNA, O'Reilly & Tech Books с оглавлением и текстовым слоем) (Completed)
|
||||
- [x] **Легковесный Pure-Python парсер (`pypdf`, Zero C-Dependency)**:
|
||||
- Подключение `pypdf` (< 400 КБ, чистый Python, без раздувания Docker-образа и без системных библиотек `poppler-utils` / `mupdf`).
|
||||
- [ ] **Извлечение оглавления и закладок PDF (`reader.outline`)**:
|
||||
- [x] **Извлечение оглавления и закладок PDF (`reader.outline`)**:
|
||||
- Извлечение авторского оглавления (ToC / Bookmarks), стандартного для книг Cisco Press (CCNA Official Cert Guide), O'Reilly и Wiley.
|
||||
- Разбивка книги на логические главы и разделы (`Part I`, `Chapter 1`, `Chapter 2`) точно по оглавлению автора.
|
||||
- [ ] **Fallback-разбивка при отсутствии оглавления**:
|
||||
- [x] **Fallback-разбивка при отсутствии оглавления**:
|
||||
- При отсутствии PDF-закладок — автоопределение заголовков через regex (`Chapter \d+`, `Глава \d+`) или группировка страниц порциями по ~12–15 страниц.
|
||||
- [ ] **Очистка шума и колонтитулов**:
|
||||
- [x] **Очистка шума и колонтитулов**:
|
||||
- Фильтрация повторяющихся верхних/нижних колонтитулов («CCNA 200-301 Official Cert Guide», «Page 45 of 900»).
|
||||
- [ ] **Сохранение CLI/Console блоков**:
|
||||
- [x] **Сохранение CLI/Console блоков**:
|
||||
- Распознавание консольного вывода и команд сетевого оборудования (`Router# show ip interface brief`, `Switch(config)#`) и оборачивание в блоки кода Markdown для читалки с кнопкой «Копировать».
|
||||
- [ ] **Защита от сканов без OCR (Scanned PDF Guard)**:
|
||||
- [x] **Защита от сканов без OCR (Scanned PDF Guard)**:
|
||||
- Валидация наличия текстового слоя: если суммарный объём извлечённого текста < 100 слов, возврат информативной ошибки с предложением использовать текстовый PDF или OCR.
|
||||
- [ ] **Интеграция в интерфейс читалки**:
|
||||
- Разрешение загрузки `.pdf` в `<input type="file" accept=".epub,.txt,.md,.pdf">`.
|
||||
- [x] **Интеграция в интерфейс читалки**:
|
||||
- Разрешение загрузки `.pdf` в `<input type="file" accept=".epub,.pdf,.txt,.md">`.
|
||||
- Обновление кнопки в библиотеке: `📁 Загрузить EPUB / PDF / TXT`.
|
||||
|
||||
---
|
||||
|
||||
Reference in new issue
Block a user