123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- package main
- import (
- . "dataIdentify/service"
- "fmt"
- "github.com/xuri/excelize/v2"
- "log"
- "net/rpc"
- "strings"
- "sync"
- "testing"
- )
- // 示例测试
- func TestRule(t *testing.T) {
- Start("6863d240d5d8e4081f770e9a")
- }
- /* 返回结果:
- * map[中标联合体:否 报价模式:其他]
- * 中标联合体: 是/否
- * 报价模式:单价/费率/折扣率/正常报价/其他
- */
- func TestRpc(t *testing.T) {
- conn, err := rpc.DialHTTP("tcp", "172.31.31.203:8811")
- if err != nil {
- log.Println(err)
- return
- }
- defer conn.Close()
- var reply map[string]string
- err = conn.Call("DataIdentify.Execute", "5b0dfeb4a5cb26b9b79c1330", &reply)
- if err != nil {
- log.Println(err)
- }
- log.Println(reply)
- }
- // 总共 300 报价模式不一致 86 中标联合体不一致 2
- func TestCompare(t *testing.T) {
- // 打开一个已存在的Excel文件。
- of, err := excelize.OpenFile("./报价模式+中标联合体验证第三轮.xlsx")
- if err != nil {
- log.Fatalln(err)
- return
- }
- // 获取工作表的名称列表。
- sheets := of.GetSheetList()
- // 读取指定工作表中的所有行。
- f := excelize.NewFile()
- sheetName := "对比结果"
- newSheetIndex, _ := f.NewSheet(sheetName)
- f.SetActiveSheet(newSheetIndex)
- // 设置工作表的标题行
- headers := []string{"_id", "链接", "测试-报价模式", "抽取-报价模式", "测试-中标联合体", "抽取-中标联合体"}
- for colNum, header := range headers {
- cell, _ := excelize.ColumnNumberToName(colNum + 1)
- f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, 1), header)
- }
- rowsTemp, err := of.GetRows(sheets[1])
- if err != nil {
- log.Fatalln(err)
- }
- //rows := [][]string{rowsTemp[0], rowsTemp[1]}
- rows := rowsTemp
- result := map[string]map[string]interface{}{}
- lock := &sync.Mutex{}
- pool := make(chan bool, 5)
- wait := &sync.WaitGroup{}
- for k, r := range rows {
- if k == 0 {
- continue
- }
- pool <- true
- wait.Add(1)
- go func(kk int, row []string) {
- defer func() {
- <-pool
- wait.Done()
- }()
- a, b := Start(row[0])
- bv := ""
- if b == 1 {
- bv = "是"
- } else if b == -1 {
- bv = "否"
- }
- lock.Lock()
- result[row[0]] = map[string]interface{}{
- "报价模式": a,
- "中标联合体": bv,
- }
- lock.Unlock()
- }(k, r)
- }
- wait.Wait()
- var aEq, bEq float64
- bZOneFieldMap := map[string]float64{}
- oneFieldMap := map[string]float64{}
- oneFieldEqMap := map[string]float64{}
- var aCount, aaCount, bCount, bbCount float64
- rowNum := 1
- for k, row := range rows {
- if k == 0 {
- continue
- }
- for i := 0; i < 8; i++ {
- row = append(row, "")
- }
- bZOneFieldMap[row[4]]++
- if row[4] != "" {
- aaCount++
- }
- if row[6] == "是" {
- bbCount++
- }
- obj := result[row[0]]
- if obj == nil {
- continue
- }
- a, b := obj["报价模式"], obj["中标联合体"]
- if a == "" && b == "否" {
- continue
- }
- if a != "" {
- if row[4] == "" {
- aEq++
- oneFieldEqMap[a.(string)]++
- } else {
- for _, v := range strings.Split(row[4], "+") {
- if v == a {
- aEq++
- oneFieldEqMap[v]++
- }
- }
- }
- aCount++
- oneFieldMap[a.(string)]++
- }
- if b == "是" {
- if b == row[6] {
- bEq++
- }
- bCount++
- }
- if (a == "" || row[4] == "" || strings.Contains(row[4], a.(string))) && (b == "否" || b == row[6]) {
- continue
- }
- rowNum++
- cell, _ := excelize.ColumnNumberToName(1)
- f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[0])
- cell, _ = excelize.ColumnNumberToName(2)
- f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[1])
- cell, _ = excelize.ColumnNumberToName(3)
- f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[4])
- cell, _ = excelize.ColumnNumberToName(4)
- f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), a)
- cell, _ = excelize.ColumnNumberToName(5)
- f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), row[6])
- cell, _ = excelize.ColumnNumberToName(6)
- f.SetCellValue(sheetName, fmt.Sprintf("%s%d", cell, rowNum), b)
- }
- f.SaveAs("./对比结果.xlsx")
- countRows := float64(len(rows) - 1)
- oneFieldMsg := ""
- for k, v := range oneFieldMap {
- oneFieldMsg += fmt.Sprintf("报价模式-%s,总数:%.f,识别出:%.f,识别率:%.f%%,正确:%.f,正确率:%.2f%%", k, bZOneFieldMap[k], v, v/bZOneFieldMap[k]*100, oneFieldEqMap[k], oneFieldEqMap[k]/v*100) + "\n"
- }
- log.Println("总数", countRows, "\n",
- fmt.Sprintf("报价模式,总数:%.f,识别出:%.f,识别率:%.f%%,正确:%.f,正确率:%.2f%%", aaCount, aCount, aCount/aaCount*100, aEq, aEq/aCount*100), "\n",
- oneFieldMsg,
- fmt.Sprintf("中标联合体,总数:%.f,识别出:%.f,识别率:%.f%%,正确:%.f,正确率:%.2f%%", bbCount, bCount, bCount/bbCount*100, bEq, bEq/bCount*100), "\n",
- "")
- }
|