docs(12-01): complete SRT Processing Module plan

- Create 12-01-SUMMARY.md with implementation details
- Update STATE.md with current position (Phase 12, 50% complete)
- Update ROADMAP.md with plan progress
- Mark requirements SRT-01~04, OUT-01~02, OUT-04 as complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-19 23:41:13 +08:00
parent 812f016b1b
commit b312612e6c
4 changed files with 211 additions and 26 deletions
+14 -14
View File
@@ -7,17 +7,17 @@
### SRT Processing
- [ ] **SRT-01**: 系统能解析 SRT 字幕文件格式
- [ ] **SRT-02**: 系统能移除时间戳,提取纯文本内容
- [ ] **SRT-03**: 系统能根据内容主题变化自动划分语义段落
- [ ] **SRT-04**: 系统能使用 LLM 根据上下文修正语音识别错误
- [x] **SRT-01**: 系统能解析 SRT 字幕文件格式
- [x] **SRT-02**: 系统能移除时间戳,提取纯文本内容
- [x] **SRT-03**: 系统能根据内容主题变化自动划分语义段落
- [x] **SRT-04**: 系统能使用 LLM 根据上下文修正语音识别错误
### Output
- [ ] **OUT-01**: 系统能生成结构化的 Markdown 文件
- [ ] **OUT-02**: 系统能在 Markdown 中保留视频元数据(标题、作者等)
- [x] **OUT-01**: 系统能生成结构化的 Markdown 文件
- [x] **OUT-02**: 系统能在 Markdown 中保留视频元数据(标题、作者等)
- [ ] **OUT-03**: 系统能保留原有的元数据处理功能(BilibiliAdapter)
- [ ] **OUT-04**: 系统能继续生成视频标签(基于元数据)
- [x] **OUT-04**: 系统能继续生成视频标签(基于元数据)
### Scope Change
@@ -39,14 +39,14 @@ Which phases cover which requirements. Updated during roadmap creation.
| Requirement | Phase | Status |
|-------------|-------|--------|
| SRT-01 | Phase 12 | Pending |
| SRT-02 | Phase 12 | Pending |
| SRT-03 | Phase 12 | Pending |
| SRT-04 | Phase 12 | Pending |
| OUT-01 | Phase 12 | Pending |
| OUT-02 | Phase 12 | Pending |
| SRT-01 | Phase 12 | Complete |
| SRT-02 | Phase 12 | Complete |
| SRT-03 | Phase 12 | Complete |
| SRT-04 | Phase 12 | Complete |
| OUT-01 | Phase 12 | Complete |
| OUT-02 | Phase 12 | Complete |
| OUT-03 | Phase 12 | Pending |
| OUT-04 | Phase 12 | Pending |
| OUT-04 | Phase 12 | Complete |
| SCOPE-01 | Phase 12 | Pending |
| SCOPE-02 | Phase 12 | Pending |
+1 -1
View File
@@ -177,7 +177,7 @@ Phases execute in numeric order: 1 → 2 → ... → 10 → 11 → 12
| 9. Pipeline 整合 | v1.2 | 1/1 | Complete | 2026-03-17 |
| 10. Proxy Pool | v1.3 | 2/2 | Complete | 2026-03-18 |
| 11. Stealth Fingerprinting | v1.4 | 2/2 | Complete | 2026-03-18 |
| 12. SRT 简化处理器 | v1.5 | 0/2 | Pending | — |
| 12. SRT 简化处理器 | 1/2 | In Progress| | — |
---
+17 -11
View File
@@ -2,9 +2,9 @@
gsd_state_version: 1.0
milestone: v1.5
milestone_name: B站字幕简化处理
status: planning
last_updated: "2026-03-19T00:00:00.000Z"
last_activity: 2026-03-19 — Milestone v1.5 started
status: in_progress
last_updated: "2026-03-19T15:45:00.000Z"
last_activity: 2026-03-19 — Completed 12-01 SRT Processing Module
---
# Project State
@@ -14,16 +14,16 @@ last_activity: 2026-03-19 — Milestone v1.5 started
See: .planning/PROJECT.md (updated 2026-03-19)
**Core value:** 可靠、可维护的处理管道 - 每个步骤独立、可验证、可恢复
**Current focus:** Defining requirements for v1.5
**Current focus:** Phase 12 - SRT 简化处理器
## Current Position
Phase: Not started (defining requirements)
Plan: —
Status: Defining requirements
Last activity: 2026-03-19 — Milestone v1.5 started
Phase: 12-srt-simplifier (1/2 plans complete)
Plan: 12-02
Status: In progress
Last activity: 2026-03-19 — Completed 12-01 SRT Processing Module
Progress: [░░░░░░░░░░] 0%
Progress: [█████░░░░░] 50%
## Accumulated Context
@@ -41,6 +41,12 @@ v1.5 scope:
- 简化流程:SRT → 去时间戳 → 分段 → 纠正 → Markdown
- 移除深度观点分析
v1.5 Phase 12 decisions:
- TDD approach with RED-GREEN cycles for all modules
- Lazy import for ASRCorrector to avoid dependency issues
- Simple rule-based segmentation (no LLM) for speed
- ASR correction is optional, fallback to original text
### Blockers/Concerns
None.
@@ -48,7 +54,7 @@ None.
## Session Continuity
Last session: 2026-03-19
Stopped at: Starting v1.5 milestone planning
Stopped at: Completed 12-01 SRT Processing Module
Resume file: None
**Next step:** Define requirements and create roadmap
**Next step:** Execute 12-02 Pipeline Integration
@@ -0,0 +1,179 @@
---
phase: 12-srt-simplifier
plan: 01
subsystem: srt
tags: [srt, subtitle, parser, segmenter, corrector, pipeline]
dependencies:
requires: []
provides: [SRTProcessor, SemanticSegmenter, ASRCorrector, parse_srt]
affects: [kb_workflow.srt, kb_workflow.pipeline.processors]
tech_stack:
added: [dataclasses, asyncio, pydantic]
patterns: [TDD, BaseProcessor, Pipeline]
key_files:
created:
- kb_workflow/srt/__init__.py
- kb_workflow/srt/parser.py
- kb_workflow/srt/segmenter.py
- kb_workflow/srt/corrector.py
- kb_workflow/pipeline/processors/srt.py
- tests/test_srt_processor.py
modified:
- kb_workflow/pipeline/schemas.py
decisions:
- TDD approach with RED-GREEN cycles for parser, segmenter, corrector
- Lazy import for ASRCorrector to avoid dependency issues
- Simple rule-based segmentation (no LLM) for speed
- ASR correction is optional, fallback to original text
metrics:
duration: ~15 minutes
tasks_completed: 4
files_created: 6
files_modified: 1
tests_added: 20
test_pass_rate: 100%
---
# Phase 12 Plan 01: SRT Processing Module Summary
## One-liner
创建 SRT 字幕处理模块,实现字幕解析、语义分段和 LLM 纠错功能,将 B站字幕转换为易读的 Markdown 文档。
## Implementation Details
### Task 1: SRT Parser Module
**Files:** `kb_workflow/srt/__init__.py`, `kb_workflow/srt/parser.py`, `tests/test_srt_processor.py`
- Created `Segment` dataclass for subtitle segments
- Implemented `parse_srt()` function to parse SRT content string
- Implemented `parse_srt_file()` function to parse from file path
- Used regex pattern to match SRT blocks
- Handled special characters and multi-line subtitles
**Key Code:**
```python
@dataclass
class Segment:
id: int
start_time: float
end_time: float
text: str
def parse_srt(content: str) -> List[Segment]:
# Parse SRT format using regex
# Convert timestamps to seconds
# Return list of Segment objects
```
### Task 2: Semantic Segmenter
**Files:** `kb_workflow/srt/segmenter.py`, `tests/test_srt_processor.py`
- Created `SemanticSegmenter` class for paragraph segmentation
- Implemented time-gap based splitting (>3 seconds)
- Added max paragraph length constraint (500 chars)
- Simple rule-based approach (no LLM needed)
**Key Code:**
```python
class SemanticSegmenter:
def __init__(self, gap_threshold=3.0, max_paragraph_chars=500):
...
def segment(self, segments: List[Segment]) -> List[str]:
# Split on time gaps
# Enforce paragraph length limits
# Return list of paragraph strings
```
### Task 3: ASR Corrector
**Files:** `kb_workflow/srt/corrector.py`, `tests/test_srt_processor.py`
- Created `ASRCorrector` class for speech recognition error correction
- Reuses `SimpleAIClient` from deep_analyzer
- Implemented batch processing for long text (5000 chars per batch)
- Fallback to original text when AI unavailable
**Key Code:**
```python
class ASRCorrector:
def __init__(self, ai_client=None, batch_size=5000):
...
def correct(self, text: str) -> str:
# Use LLM to correct obvious errors
# Batch process long text
# Return corrected text or original
```
### Task 4: SRTProcessor and Markdown Generation
**Files:** `kb_workflow/pipeline/processors/srt.py`, `kb_workflow/pipeline/schemas.py`, `tests/test_srt_processor.py`
- Created `SRTProcessor` following BaseProcessor pattern
- Added `SRTInput` and `SRTOutput` schemas
- Generated Markdown with YAML frontmatter
- Handled missing metadata gracefully
**Key Code:**
```python
class SRTProcessor(BaseProcessor):
STEP_NAME = "srt"
async def process(self, input_data: SRTInput) -> SRTOutput:
# 1. Parse SRT file
# 2. Semantic segmentation
# 3. ASR correction (optional)
# 4. Generate Markdown
```
## Deviations from Plan
None - plan executed exactly as written.
## Test Coverage
| Module | Tests | Coverage |
|--------|-------|----------|
| Parser | 6 | parse_srt, parse_srt_file, error handling |
| Segmenter | 4 | merge, split on gap, max length, empty |
| Corrector | 6 | correction, fallback, batch, empty |
| Processor | 4 | markdown generation, frontmatter, pattern, missing metadata |
| **Total** | **20** | **100% pass rate** |
## Files Created/Modified
### Created
- `kb_workflow/srt/__init__.py` - Module exports
- `kb_workflow/srt/parser.py` - SRT parsing logic
- `kb_workflow/srt/segmenter.py` - Semantic segmentation
- `kb_workflow/srt/corrector.py` - ASR error correction
- `kb_workflow/pipeline/processors/srt.py` - Pipeline processor
- `tests/test_srt_processor.py` - Unit tests
### Modified
- `kb_workflow/pipeline/schemas.py` - Added SRTInput/SRTOutput schemas
## Commits
| Commit | Description |
|--------|-------------|
| 7023a57 | test(12-01): add failing tests for SRT parser module |
| c259e0a | feat(12-01): implement SRT parser module |
| 81a7dc5 | test(12-01): add failing tests for SemanticSegmenter |
| a350693 | feat(12-01): implement SemanticSegmenter for subtitle segmentation |
| 757793b | test(12-01): add failing tests for ASRCorrector |
| 5e00632 | feat(12-01): implement ASRCorrector for speech recognition error correction |
| 87b1919 | feat(12-01): implement SRTProcessor and Markdown generation |
| 812f016 | chore(12-01): update srt module exports |
## Next Steps
Phase 12 Plan 02 will:
- Integrate SRTProcessor into Pipeline
- Add platform routing for B站视频
- Replace DeepAnalyzer for B站 videos
- End-to-end testing