fix(backend): #1892 画面插入按句号分句 #1905

Merged
auto-approve-bot merged 1 commits from fix/1892-sentence-split-period-only into develop 2026-09-14 18:15:38 +08:00
Owner

背景

Issue #1892:画面插入分句按句号分隔,去掉逗号分句。前端 sentences.ts 已同步调整,后端需保持一致。

改动

  • packages/domain/sentence_timings.py:split_script_into_sentences 正则从 [。!?!??!;;,,\n\r]+ 去掉 , 和 ,,仅按句号/问号/感叹号/分号/换行分句
  • 原因:按逗号切分会把连贯小句拆得过碎(如「卖花的叫花无缺,卖姜的叫姜子牙」被切成两句),导致 B-roll/口播画面按句插入时句数过多、时长过短

调用方影响评估

所有 split_script_into_sentences 调用点:

  • packages/domain/sentence_timings.py:119 compute_sentence_timings 内部消费:句数变化只影响静音检测匹配粒度和字符比例降级分段数,时间戳对齐逻辑(silencedetect silence_end 点→句子边界)按句数自适应,不受影响
  • apps/api/app/tasks/lipsync_tts.py:237 仅接收 sentence_timings 列表持久化到 job,消费端按句顺序展示,不依赖固定句数

结论:去掉逗号分句不会破坏 B-roll 时间戳对齐,只让句子边界更符合用户预期的完整小句。

测试

  • 新增 3 个单测:中文逗号不切、英文逗号不切、句号间带逗号保持完整
  • tests/unit/test_sentence_timings.py 24/24 passed

Refs: #1892

## 背景 Issue #1892:画面插入分句按句号分隔,去掉逗号分句。前端 sentences.ts 已同步调整,后端需保持一致。 ## 改动 - `packages/domain/sentence_timings.py`:`split_script_into_sentences` 正则从 `[。!?!??!;;,,\n\r]+` 去掉 `,` 和 `,`,仅按句号/问号/感叹号/分号/换行分句 - 原因:按逗号切分会把连贯小句拆得过碎(如「卖花的叫花无缺,卖姜的叫姜子牙」被切成两句),导致 B-roll/口播画面按句插入时句数过多、时长过短 ## 调用方影响评估 所有 `split_script_into_sentences` 调用点: - `packages/domain/sentence_timings.py:119` `compute_sentence_timings` 内部消费:句数变化只影响静音检测匹配粒度和字符比例降级分段数,时间戳对齐逻辑(silencedetect silence_end 点→句子边界)按句数自适应,不受影响 - `apps/api/app/tasks/lipsync_tts.py:237` 仅接收 sentence_timings 列表持久化到 job,消费端按句顺序展示,不依赖固定句数 结论:去掉逗号分句不会破坏 B-roll 时间戳对齐,只让句子边界更符合用户预期的完整小句。 ## 测试 - 新增 3 个单测:中文逗号不切、英文逗号不切、句号间带逗号保持完整 - `tests/unit/test_sentence_timings.py` 24/24 passed Refs: #1892
xiaoxia added 1 commit 2026-09-14 18:03:43 +08:00
fix(backend): #1892 画面插入按句号分句,去掉逗号分隔
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 28s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 30s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m22s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m47s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m48s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 4m15s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 4m30s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 4m59s
AI Code Review / AI Code Review (pull_request) Successful in 6m24s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 11m11s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 8m22s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 9s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 28s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 45h8m48s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 45h19m17s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 45h19m29s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 45h19m55s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 45h20m1s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 45h18m54s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 45h19m1s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 45h19m1s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 45h19m32s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 45h19m33s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 45h19m35s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 45h18m49s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 45h8m15s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 45h8m20s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 45h8m20s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 45h8m15s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 45h18m49s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 45h19m21s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 45h19m26s
dfce764b4b
- packages/domain/sentence_timings.py: split_script_into_sentences 正则去掉中英文逗号(, ,),仅按句号/问号/感叹号/分号/换行分句,与前端 sentences.ts 的 SENTENCE_SPLIT_RE 保持一致
- 原因:按逗号切分会把连贯小句拆得过碎,导致 B-roll/口播画面按句插入时句数过多、时长过短(Issue #1892)
- 检查调用方:lipsync_tts 等仅消费 sentences 列表+时间戳,句数变化只影响时间粒度,compute_sentence_timings 的静音点检测与字符比例降级仍正常工作,B-roll 时间戳对齐不受影响
- 单测:新增中文/英文逗号不切分、句号间带逗号保持完整的 3 个用例,全部 24 个用例通过

🚀 预览环境已部署

项目 详情
PR号 #1905
预览链接 https://pr-1905.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1905 | | 预览链接 | [https://pr-1905.preview.xiaoxiajianji.com](https://pr-1905.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot merged commit 26f3abab72 into develop 2026-09-14 18:15:38 +08:00
auto-approve-bot deleted branch fix/1892-sentence-split-period-only 2026-09-14 18:15:39 +08:00

🗑️ 预览环境已清理

PR #1905 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1905 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.