doco: C4收口 + A稿解析器升级(LLM骨架) + ep002/003/004骨架

- 新增 fusion_align.py(C4 compose + skeleton 提取/校验/预览)与 doco skeleton 命令
- ep001 C4 产物入库: 融合A稿.docx / 融合B稿.txt / c4_alignment.csv / fusion_review.csv
- ep002/003/004: A稿 + 分段骨架(json+预览), 上游待跑
- .gitignore 增 .c3_cache/.c4_cache (可重生中间缓存不入库)
- 更新 doco/CLAUDE.md 交接备注
This commit is contained in:
simonkoson
2026-06-18 14:36:14 +08:00
parent 60f22e6660
commit 10b0ab757b
18 changed files with 3808 additions and 22 deletions
@@ -0,0 +1,466 @@
[
{
"type": "normal",
"para_start": 1,
"para_end": 3,
"role_label": "【导视1】",
"header_inline": false,
"header_para_idx": 1
},
{
"type": "normal",
"para_start": 4,
"para_end": 8,
"role_label": "【主持人1】",
"header_inline": false,
"header_para_idx": 4
},
{
"type": "normal",
"para_start": 9,
"para_end": 12,
"role_label": "【解说1】",
"header_inline": false,
"header_para_idx": 9
},
{
"type": "normal",
"para_start": 13,
"para_end": 14,
"role_label": "【主持人2】",
"header_inline": false,
"header_para_idx": 13
},
{
"type": "normal",
"para_start": 15,
"para_end": 16,
"role_label": "【解说2】",
"header_inline": false,
"header_para_idx": 15
},
{
"type": "normal",
"para_start": 17,
"para_end": 17,
"role_label": "【小剧场1-主持人1】",
"header_inline": true,
"header_para_idx": 17
},
{
"type": "normal",
"para_start": 18,
"para_end": 18,
"role_label": "【小剧场1-卡1】",
"header_inline": true,
"header_para_idx": 18
},
{
"type": "normal",
"para_start": 19,
"para_end": 19,
"role_label": "【小剧场1-主持人2】",
"header_inline": true,
"header_para_idx": 19
},
{
"type": "normal",
"para_start": 20,
"para_end": 20,
"role_label": "【小剧场1-卡2】",
"header_inline": true,
"header_para_idx": 20
},
{
"type": "normal",
"para_start": 21,
"para_end": 24,
"role_label": "【解说3】",
"header_inline": false,
"header_para_idx": 21
},
{
"type": "normal",
"para_start": 25,
"para_end": 25,
"role_label": "【小剧场1-主持人3】",
"header_inline": true,
"header_para_idx": 25
},
{
"type": "normal",
"para_start": 26,
"para_end": 27,
"role_label": "【小剧场1-卡3】",
"header_inline": true,
"header_para_idx": 26
},
{
"type": "normal",
"para_start": 28,
"para_end": 28,
"role_label": "【小剧场1-主持人4】",
"header_inline": true,
"header_para_idx": 28
},
{
"type": "normal",
"para_start": 29,
"para_end": 29,
"role_label": "【小剧场1-卡4】",
"header_inline": true,
"header_para_idx": 29
},
{
"type": "normal",
"para_start": 30,
"para_end": 32,
"role_label": "【解说4】",
"header_inline": false,
"header_para_idx": 30
},
{
"type": "normal",
"para_start": 33,
"para_end": 33,
"role_label": "【主持人3】",
"header_inline": true,
"header_para_idx": 33
},
{
"type": "normal",
"para_start": 34,
"para_end": 35,
"role_label": "【解说5】",
"header_inline": false,
"header_para_idx": 34
},
{
"type": "normal",
"para_start": 36,
"para_end": 36,
"role_label": "【小剧场2-主持人1】",
"header_inline": true,
"header_para_idx": 36
},
{
"type": "normal",
"para_start": 37,
"para_end": 37,
"role_label": "【小剧场2-斯1】",
"header_inline": true,
"header_para_idx": 37
},
{
"type": "normal",
"para_start": 38,
"para_end": 38,
"role_label": "【小剧场2-主持人2】",
"header_inline": true,
"header_para_idx": 38
},
{
"type": "normal",
"para_start": 39,
"para_end": 39,
"role_label": "【小剧场2-斯2】",
"header_inline": true,
"header_para_idx": 39
},
{
"type": "normal",
"para_start": 40,
"para_end": 42,
"role_label": "【解说6】",
"header_inline": false,
"header_para_idx": 40
},
{
"type": "normal",
"para_start": 43,
"para_end": 43,
"role_label": "【小剧场2-斯3】",
"header_inline": true,
"header_para_idx": 43
},
{
"type": "normal",
"para_start": 44,
"para_end": 46,
"role_label": "【解说7】",
"header_inline": false,
"header_para_idx": 44
},
{
"type": "normal",
"para_start": 47,
"para_end": 47,
"role_label": "【小剧场2-斯4】",
"header_inline": true,
"header_para_idx": 47
},
{
"type": "normal",
"para_start": 48,
"para_end": 48,
"role_label": "【小剧场2-主持人3】",
"header_inline": true,
"header_para_idx": 48
},
{
"type": "normal",
"para_start": 49,
"para_end": 49,
"role_label": "【小剧场2-斯5】",
"header_inline": true,
"header_para_idx": 49
},
{
"type": "normal",
"para_start": 50,
"para_end": 51,
"role_label": "【解说8】",
"header_inline": false,
"header_para_idx": 50
},
{
"type": "normal",
"para_start": 52,
"para_end": 54,
"role_label": "【主持人4】",
"header_inline": true,
"header_para_idx": 52
},
{
"type": "normal",
"para_start": 55,
"para_end": 55,
"role_label": "【小剧场3-主持人1】",
"header_inline": true,
"header_para_idx": 55
},
{
"type": "normal",
"para_start": 56,
"para_end": 56,
"role_label": "【小剧场3-卡1】",
"header_inline": true,
"header_para_idx": 56
},
{
"type": "normal",
"para_start": 57,
"para_end": 57,
"role_label": "【小剧场3-主持人2】",
"header_inline": true,
"header_para_idx": 57
},
{
"type": "normal",
"para_start": 58,
"para_end": 58,
"role_label": "【小剧场3-卡2】",
"header_inline": true,
"header_para_idx": 58
},
{
"type": "normal",
"para_start": 59,
"para_end": 60,
"role_label": "【解说9】",
"header_inline": false,
"header_para_idx": 59
},
{
"type": "normal",
"para_start": 61,
"para_end": 61,
"role_label": "【小剧场3-卡3】",
"header_inline": true,
"header_para_idx": 61
},
{
"type": "normal",
"para_start": 62,
"para_end": 62,
"role_label": "【小剧场3-主持人3】",
"header_inline": true,
"header_para_idx": 62
},
{
"type": "normal",
"para_start": 63,
"para_end": 63,
"role_label": "【小剧场3-斯4】",
"header_inline": true,
"header_para_idx": 63
},
{
"type": "normal",
"para_start": 64,
"para_end": 64,
"role_label": "【小剧场3-主持人4】",
"header_inline": true,
"header_para_idx": 64
},
{
"type": "normal",
"para_start": 65,
"para_end": 65,
"role_label": "【小剧场3-斯5】",
"header_inline": true,
"header_para_idx": 65
},
{
"type": "normal",
"para_start": 66,
"para_end": 67,
"role_label": "【解说10】",
"header_inline": false,
"header_para_idx": 66
},
{
"type": "normal",
"para_start": 68,
"para_end": 68,
"role_label": "【小剧场3-斯6】",
"header_inline": true,
"header_para_idx": 68
},
{
"type": "normal",
"para_start": 69,
"para_end": 72,
"role_label": "【解说11】",
"header_inline": false,
"header_para_idx": 69
},
{
"type": "normal",
"para_start": 73,
"para_end": 74,
"role_label": "【小剧场3-主持人5】",
"header_inline": true,
"header_para_idx": 73
},
{
"type": "normal",
"para_start": 75,
"para_end": 75,
"role_label": "【小剧场3-卡8】",
"header_inline": true,
"header_para_idx": 75
},
{
"type": "normal",
"para_start": 76,
"para_end": 76,
"role_label": "【小剧场3-斯9】",
"header_inline": true,
"header_para_idx": 76
},
{
"type": "normal",
"para_start": 77,
"para_end": 77,
"role_label": "【小剧场3-主持人6】",
"header_inline": true,
"header_para_idx": 77
},
{
"type": "normal",
"para_start": 78,
"para_end": 78,
"role_label": "【小剧场3-斯通纳10】",
"header_inline": true,
"header_para_idx": 78
},
{
"type": "normal",
"para_start": 79,
"para_end": 80,
"role_label": "【解说12】",
"header_inline": false,
"header_para_idx": 79
},
{
"type": "normal",
"para_start": 81,
"para_end": 81,
"role_label": "【小剧场4-主持人1】",
"header_inline": true,
"header_para_idx": 81
},
{
"type": "normal",
"para_start": 82,
"para_end": 82,
"role_label": "【小剧场4-卡1】",
"header_inline": true,
"header_para_idx": 82
},
{
"type": "normal",
"para_start": 83,
"para_end": 83,
"role_label": "【小剧场4-主持人2】",
"header_inline": true,
"header_para_idx": 83
},
{
"type": "normal",
"para_start": 84,
"para_end": 84,
"role_label": "【小剧场4-斯2】",
"header_inline": true,
"header_para_idx": 84
},
{
"type": "normal",
"para_start": 85,
"para_end": 85,
"role_label": "【小剧场4-主持人3】",
"header_inline": true,
"header_para_idx": 85
},
{
"type": "normal",
"para_start": 86,
"para_end": 90,
"role_label": "【解说13】",
"header_inline": false,
"header_para_idx": 86
},
{
"type": "normal",
"para_start": 91,
"para_end": 91,
"role_label": "【小剧场4-卡3】",
"header_inline": true,
"header_para_idx": 91
},
{
"type": "normal",
"para_start": 92,
"para_end": 92,
"role_label": "【小剧场4-斯5】",
"header_inline": true,
"header_para_idx": 92
},
{
"type": "normal",
"para_start": 93,
"para_end": 93,
"role_label": "【小剧场4-主持人6】",
"header_inline": true,
"header_para_idx": 93
},
{
"type": "normal",
"para_start": 94,
"para_end": 94,
"role_label": "【主持人5】",
"header_inline": true,
"header_para_idx": 94
}
]
@@ -0,0 +1,68 @@
# ep004_20260526_qiangwang_duijue 骨架预览表
# 原始骨架: 58 段 → 合并后: 58 段
======================================================================
ep004_20260526_qiangwang_duijue 骨架预览表
======================================================================
seq | type | role_label | 正文前20字
-----+---------+-------------------------------------+---------------------
1 | normal | 【导视1】 | 他们的一生是创造的一生,他们的灵感或许来
2 | normal | 【主持人1】 | 各位观众,大家好!欢迎收看《军事科技》,
3 | normal | 【解说1】 | 2013年12月23日,枪械设计大师、A
4 | normal | 【主持人2】 | 卡拉什尼科夫于1919年11月10日出生
5 | normal | 【解说2】 | 少年时期的卡拉什尼科夫,最大的梦想并非设
6 | normal | 【小剧场1-主持人1】 | 卡拉什尼科夫先生,您年少时一心想要研发农
7 | normal | 【小剧场1-卡1】 | 在不远处就是我的家,你也能看到,除了几间
8 | normal | 【小剧场1-主持人2】 | 辍学之后,您没有放弃对机械的钻研,对吗?
9 | normal | 【小剧场1-卡2】 | 没错。我打心底里喜欢机械,便自己自学机械
10 | normal | 【解说3】 | 1938年,19岁的卡拉什尼科夫应征入伍
11 | normal | 【小剧场1-主持人3】 | 战场上的差距往往最直观,您亲身经历过东线
12 | normal | 【小剧场1-卡3】 | 当时的情况糟透了,我们根本没有还手之力,
13 | normal | 【小剧场1-主持人4】 | 也就是在那个时候,您下定决心,放弃农机梦
14 | normal | 【小剧场1-卡4】 | 没错。这个念头一旦萌生,就再也无法消散。
15 | normal | 【解说4】 | 经过刻苦钻研,卡拉什尼科夫先后设计出冲锋
16 | normal | 【主持人3】 | 在卡拉什尼科夫三岁那年,大洋彼岸的美国,
17 | normal | 【解说5】 | 1922年11月,尤金·斯通纳出生于美国
18 | normal | 【小剧场2-主持人1】 | 斯通纳先生,您刚进入航空企业时,从事的是
19 | normal | 【小剧场2-斯1】 | 刚入职的时候,我做的都是基础工作,主要从
20 | normal | 【小剧场2-主持人2】 | 想必过程十分艰辛吧?
21 | normal | 【小剧场2-斯2】 | 确实不易。我利用业余时间上夜校,去航空学
22 | normal | 【解说6】 | 1941年12月7日,日本海军舰队偷袭珍
23 | normal | 【小剧场2-斯3】 | 战争结束后,我荣誉退伍,先后就职于多家知
24 | normal | 【解说7】 | 但二战结束后,战争形态发生了彻底变革:堑
25 | normal | 【小剧场2-斯4】 | 我亲眼目睹了美军士兵的作战困境。当时列装
26 | normal | 【小剧场2-主持人3】 | 所以航空技术成为了您设计M-16的独家优
27 | normal | 【小剧场2-斯5】 | 是的。航空制造追求轻量化、高精度、高稳定
28 | normal | 【解说8】 | M-16步枪因枪身通体呈黑色,被人们戏称
29 | normal | 【主持人4】 | 一位,是战火幸存者的自救式设计;一位,是
30 | normal | 【小剧场3-主持人1】 | 卡拉什尼科夫先生,对于AK-47外界有人
31 | normal | 【小剧场3-卡1】 | 我从来不认为这是粗糙,却是纯粹的皮实,是
32 | normal | 【小剧场3-主持人2】 | 所以您的设计,都是围绕实战可靠性展开?
33 | normal | 【小剧场3-卡2】 | 没错。一把好枪,应该是士兵身体的一部分,
34 | normal | 【解说9】 | AK-47枪长870毫米,枪管长415毫
35 | normal | 【小剧场3-卡3】 | 气式的工作原理,其实一点都不复杂。当击锤
36 | normal | 【小剧场3-主持人3】 | 嗯,那么,斯通纳先生,相较于卡拉什尼科夫
37 | normal | 【小剧场3-斯4】 | 在我看来,单纯的皮实耐用远远不足以适配现
38 | normal | 【小剧场3-主持人4】 | 模块化在当时属于十分新颖的设计,您为什么
39 | normal | 【小剧场3-斯5】 | 现代战争场景愈发复杂,作战任务灵活多变,
40 | normal | 【解说10】 | M-16 轻便且质感高级,加工工艺精密,
41 | normal | 【小剧场3-斯6】 | 我设计的导气方式与卡拉什尼科夫先生的完全
42 | normal | 【解说11】 | 此外,M-16还十分注重枪械的人机工学设
43 | normal | 【小剧场3-主持人5】 | 1990年两位首次碰面,还互相试射了对方
44 | normal | 【小剧场3-卡8】 | 斯通纳先生的枪精度很高,子弹初速快,设计
45 | normal | 【小剧场3-斯9】 | 我十分认可卡拉什尼科夫先生的设计。AK-
46 | normal | 【小剧场3-主持人6】 | 如果互换使用场景,您会如何选择?
47 | normal | 【小剧场3-斯通纳10】 | 如果我是没有后勤保障、身处蛮荒丛林的普通
48 | normal | 【解说12】 | 两款经典步枪问世后,在越南战争的战场上迎
49 | normal | 【小剧场4-主持人1】 | 两款枪没有优劣之分,只有适配之别。AK-
50 | normal | 【小剧场4-卡1】 | 在我看来,可靠性永远排在第一位。一把好武
51 | normal | 【小剧场4-主持人2】 | 斯通纳先生,您是怎么认为?
52 | normal | 【小剧场4-斯2】 | 我的评判标准更加贴合现代战术。优秀的单兵
53 | normal | 【小剧场4-主持人3】 | 二位的设计理念虽不同,却都坚守着自己的初
54 | normal | 【解说13】 | 2025年11月10日,联合国安理会就小
55 | normal | 【小剧场4-卡3】 | 坦白说,我为它能保护我方士兵、守护和平而
56 | normal | 【小剧场4-斯5】 | 技术本身不会制造杀戮,决定善恶的,永远是
57 | normal | 【小剧场4-主持人6】 | 你们两人都绝非战争狂热者,只是时代洪流中
58 | normal | 【主持人5】 | 本期《军事科技》就到这里,感谢收看,我们
======================================================================
[WARN] 请人工核验: role_label是否含真人姓名? ignore是否漏/多? type是否正确?