-
Notifications
You must be signed in to change notification settings - Fork 230
/
dialogue_merger.go
91 lines (74 loc) · 2.29 KB
/
dialogue_merger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package sub_helper
import (
"github.com/allanpk716/ChineseSubFinder/pkg/types/subparser"
)
// DialogueMerger 合并分散的对白,目标是搞定英文字幕
type DialogueMerger struct {
dialogueMap map[string]*subparser.OneDialogueEx
dialogueIndex []string
lastStartTime string
}
func NewDialogueMerger() *DialogueMerger {
return &DialogueMerger{
dialogueMap: make(map[string]*subparser.OneDialogueEx, 0),
dialogueIndex: make([]string, 0),
lastStartTime: "",
}
}
func (d *DialogueMerger) Add(inDialogueEx subparser.OneDialogueEx) bool {
// 第一个首字母是否是大写
isUpper := isFirstLetterIsEngUpper(inDialogueEx.EnLine)
isLower := isFirstLetterIsEngLower(inDialogueEx.EnLine)
if isUpper == true {
// 大写就新增
d.dialogueMap[inDialogueEx.StartTime] = &inDialogueEx
d.lastStartTime = inDialogueEx.StartTime
d.dialogueIndex = append(d.dialogueIndex, inDialogueEx.StartTime)
return true
} else if isLower == true {
// 小写就跟上一条的大写进行匹配,看是否能够附加到后面
if d.lastStartTime == "" {
return false
}
// 这里除了拼接 EnLine,还需要把 offsetEndTime 更新
d.dialogueMap[d.lastStartTime].EnLine += " " + inDialogueEx.EnLine
d.dialogueMap[d.lastStartTime].EndTime = inDialogueEx.EndTime
//d.lastStartTime = ""
return true
} else {
// 其他情况也新增
d.dialogueMap[inDialogueEx.StartTime] = &inDialogueEx
d.dialogueIndex = append(d.dialogueIndex, inDialogueEx.StartTime)
}
return false
}
func (d *DialogueMerger) Clear() {
d.lastStartTime = ""
}
func (d *DialogueMerger) Get() []subparser.OneDialogueEx {
var outDialogueExList = make([]subparser.OneDialogueEx, 0)
for _, startString := range d.dialogueIndex {
outDialogueExList = append(outDialogueExList, *d.dialogueMap[startString])
}
return outDialogueExList
}
// isFirstLetterIsEngUpper 字符开头的是英文大写的字幕
func isFirstLetterIsEngUpper(instring string) bool {
if len(instring) <= 0 {
return false
}
if 64 < instring[0] && instring[0] < 91 {
return true
}
return false
}
// isFirstLetterIsEngLower 字符开头的是英文小写的字幕
func isFirstLetterIsEngLower(instring string) bool {
if len(instring) <= 0 {
return false
}
if 96 < instring[0] && instring[0] < 123 {
return true
}
return false
}