Skip to content

feat: use ASR segments for CJK NLP splitting#574

Open
sld272 wants to merge 1 commit into
Huanshere:mainfrom
sld272:pr/cjk-nlp-segments
Open

feat: use ASR segments for CJK NLP splitting#574
sld272 wants to merge 1 commit into
Huanshere:mainfrom
sld272:pr/cjk-nlp-segments

Conversation

@sld272

@sld272 sld272 commented Jun 4, 2026

Copy link
Copy Markdown

概要

新增 ASR segment 级文本作为 NLP 分句的优先输入,同时保留 word/char 级时间戳数据用于最终字幕时间轴对齐。并修复 spaCy 语言选择逻辑,为旧任务加入 fallback。

背景

对于日语/中文,WhisperX alignment 的 words 可能是字符级。旧流程会把这些字符级行直接拼成一整条超长字符串送进 spaCy,带来两个问题:

  • 日语 Sudachi tokenizer 有单次输入字节限制,长文本会直接报错。
  • NLP/LLM 分句拿到的是巨大字符流,而不是自然的 ASR segment 文本,分句质量差且容易触发 LLM 重试。

但最终时间戳对齐仍然需要字符级时间戳。因此本次修改把两个职责拆开:

  • NLP/LLM 使用 segment 文本。
  • 最终时间戳生成继续使用 word/character 级表。

修改

  • 新增 _2_ASR_SEGMENTS = "output/log/asr_segments.xlsx"
  • 新增 save_segments() 保存 ASR segment 级文本。
  • ASR 流程中调用 save_segments()
  • 本地 WhisperX 同步写入 whisper.languagewhisper.detected_language
  • 修复 spaCy 语言选择逻辑:只要用户手动指定 whisper.language,就优先使用;只有 auto 才使用 detected_language
  • 修改 split_by_mark.py
    • 优先读取 asr_segments.xlsx
    • 如果没有该文件,则从旧的 cleaned_chunks.xlsx 重建文本。
    • 按 UTF-8 字节数切分长输入,避免超过 Sudachi tokenizer 限制。

验证

  • 已通过 py_compile 检查。
  • 已验证当前已有的字符级日语输出可以通过 fallback 生成 split_by_nlp.txt
  • 当前样本 fallback 结果为 484 行,最长行 342 字符。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant