Browse Source

调整输出字幕对比分析的 html 逻辑

Signed-off-by: 716 <[email protected]>
716 4 years ago
parent
commit
24143badf2

+ 25 - 29
internal/pkg/sub_timeline_fixer/fixer.go

@@ -7,14 +7,11 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_parser/ass"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_parser/srt"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_parser_hub"
-	"github.com/go-echarts/go-echarts/v2/charts"
 	"github.com/go-echarts/go-echarts/v2/opts"
+	"github.com/grd/stat"
 	"github.com/james-bowman/nlp"
 	"github.com/james-bowman/nlp/measures/pairwise"
 	"gonum.org/v1/gonum/mat"
-	"math/rand"
-	"os"
-
 	"strings"
 	"time"
 )
@@ -166,9 +163,15 @@ func GetOffsetTime(baseEngSubFPath, srcSubFPath string) (time.Duration, error) {
 	} else {
 		timeFormat = timeFormatSrt
 	}
+
+	var startDiffTimeLineData = make([]opts.LineData, 0)
+	var endDiffTimeLineData = make([]opts.LineData, 0)
+	var startDiffTimeList = make(stat.Float64Slice, 0)
+	var endDiffTimeList = make(stat.Float64Slice, 0)
+	var xAxis = make([]string, 0)
 	// 上面找出了连续匹配 maxCompareDialogue:N 次的字幕语句块
 	// 求出平均时间偏移
-	for _, matchIndexItem := range matchIndexList {
+	for mIndex, matchIndexItem := range matchIndexList {
 
 		for i := 0; i < maxCompareDialogue; i++ {
 			// 这里会统计连续的这 5 句话的时间差
@@ -199,6 +202,14 @@ func GetOffsetTime(baseEngSubFPath, srcSubFPath string) (time.Duration, error) {
 			TimeDiffStart := baseTimeStart.Sub(srtTimeStart)
 			TimeDiffEnd := baseTimeEnd.Sub(srtTimeEnd)
 
+			startDiffTimeLineData = append(startDiffTimeLineData, opts.LineData{Value: TimeDiffStart.Seconds()})
+			endDiffTimeLineData = append(endDiffTimeLineData, opts.LineData{Value: TimeDiffEnd.Seconds()})
+
+			startDiffTimeList = append(startDiffTimeList, TimeDiffStart.Seconds())
+			endDiffTimeList = append(endDiffTimeList, TimeDiffEnd.Seconds())
+
+			xAxis = append(xAxis, fmt.Sprintf("%d_%d", mIndex, i))
+
 			println(fmt.Sprintf("Diff Start-End: %s - %s Base[%d] %s-%s '%s' <--> Src[%d] %s-%s '%s'",
 				TimeDiffStart, TimeDiffEnd,
 				tmpBaseIndex, infoBase.DialoguesEx[tmpBaseIndex].StartTime, infoBase.DialoguesEx[tmpBaseIndex].EndTime, infoBase.DialoguesEx[tmpBaseIndex].EnLine,
@@ -207,32 +218,17 @@ func GetOffsetTime(baseEngSubFPath, srcSubFPath string) (time.Duration, error) {
 		println("---------------------------------------------")
 	}
 
-	// 1.New 一个条形图对象
-	bar := charts.NewBar()
-	// 2.设置 标题 和 子标题
-	bar.SetGlobalOptions(charts.WithTitleOpts(opts.Title{
-		Title:    "My first bar chart generated by go-echarts",
-		Subtitle: "It's extremely easy to use, right?",
-	}))
-
-	// 3.设置 数据组
-	bar.SetXAxis([]string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}).
-		AddSeries("Category A", generateBarItems()).
-		AddSeries("Category B", generateBarItems())
-	// 4.绘图 生成html
-	f, _ := os.Create("bar.html")
-	bar.Render(f)
-
-	return 0, nil
-}
+	mean := stat.Mean(startDiffTimeList)
+	sd := stat.Sd(startDiffTimeList)
 
-// 数据生成数据
-func generateBarItems() []opts.BarData {
-	items := make([]opts.BarData, 0)
-	for i := 0; i < 7; i++ {
-		items = append(items, opts.BarData{Value: rand.Intn(300)})
+	err = SaveStaticLine("bar.html", infoBase.Name, infoSrc.Name,
+		mean, sd, xAxis,
+		startDiffTimeLineData, endDiffTimeLineData)
+	if err != nil {
+		return 0, err
 	}
-	return items
+
+	return 0, nil
 }
 
 const timeFormatAss = "15:04:05.00"

+ 4 - 4
internal/pkg/sub_timeline_fixer/fixer_test.go

@@ -47,15 +47,15 @@ func TestGetOffsetTime(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	//enSubFile := path.Join(testRootDir, "R&M S05E01 - English.srt")
-	//ch_enSubFile := path.Join(testRootDir, "R&M S05E01 - 简英.srt")
+	enSubFile := path.Join(testRootDir, "R&M S05E01 - English.srt")
+	ch_enSubFile := path.Join(testRootDir, "R&M S05E01 - 简英.srt")
 
 	//enSubFile := path.Join(testRootDir, "R&M S05E10 - English.ass")
 	//ch_enSubFile := path.Join(testRootDir, "R&M S05E10 - 简英.ass")
 	//ch_enSubFile := path.Join(testRootDir, "R&M S05E10 - 简英-shooter.ass")
 
-	enSubFile := path.Join(testRootDir, "基地 S01E03 - English.ass")
-	ch_enSubFile := path.Join(testRootDir, "基地 S01E03 - 简英.ass")
+	//enSubFile := path.Join(testRootDir, "基地 S01E03 - English.ass")
+	//ch_enSubFile := path.Join(testRootDir, "基地 S01E03 - 简英.ass")
 
 	time, err := GetOffsetTime(enSubFile, ch_enSubFile)
 	if err != nil {

+ 33 - 0
internal/pkg/sub_timeline_fixer/static_line.go

@@ -0,0 +1,33 @@
+package sub_timeline_fixer
+
+import (
+	"fmt"
+	"github.com/go-echarts/go-echarts/v2/charts"
+	"github.com/go-echarts/go-echarts/v2/opts"
+	"os"
+)
+
+func SaveStaticLine(saveFPath string, infoBaseName, infoSrcName string,
+	mean, sd float64, xAxis []string,
+	startDiffTimeLineData, endDiffTimeLineData []opts.LineData) error {
+	// 1.New 一个条形图对象
+	bar := charts.NewLine()
+	// 2.设置 标题 和 子标题
+	bar.SetGlobalOptions(charts.WithTitleOpts(opts.Title{
+		Title:    infoBaseName + " <-->" + infoSrcName,
+		Subtitle: fmt.Sprintf("Base -> Src Mean: %f SD: %f", mean, sd),
+	}))
+
+	// 3.设置 数据组
+	bar.SetXAxis(xAxis).
+		AddSeries("Start Time Diff", startDiffTimeLineData).
+		AddSeries("End Time Diff", endDiffTimeLineData)
+	// 4.绘图 生成html
+	f, _ := os.Create(saveFPath)
+	err := bar.Render(f)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}