Refactor kafka to pure Go (franz-go), fix DBC stubs, update Dockerfile
This commit is contained in:
136
pkg/can-go/scripts/main.go
Normal file
136
pkg/can-go/scripts/main.go
Normal file
@@ -0,0 +1,136 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"regexp"
|
||||
"unicode"
|
||||
|
||||
"golang.org/x/text/encoding/simplifiedchinese"
|
||||
"golang.org/x/text/language"
|
||||
"golang.org/x/text/transform"
|
||||
|
||||
"cloud.google.com/go/translate"
|
||||
"google.golang.org/api/option"
|
||||
)
|
||||
|
||||
const dbcReadFilePath = "../orig/121-N60AB_ADASBUS_Matrix_CANFD_V2.3.dbc"
|
||||
const dbcWriteFilePath = "../dbc/n60.dbc"
|
||||
const googleAPIProjectKey = ""
|
||||
|
||||
var enc = simplifiedchinese.GB18030
|
||||
var lexicon map[string]string
|
||||
|
||||
func main() {
|
||||
lexicon = make(map[string]string)
|
||||
reg, err := regexp.Compile("[^a-zA-Z0-9]+")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
readFile, err := os.Open(dbcReadFilePath)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer readFile.Close()
|
||||
r := transform.NewReader(readFile, enc.NewDecoder())
|
||||
|
||||
writeFile, err := os.Create(dbcWriteFilePath)
|
||||
defer writeFile.Close()
|
||||
w := transform.NewWriter(writeFile, enc.NewEncoder())
|
||||
|
||||
scanner := bufio.NewScanner(r)
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
indices := findIndices(line, "\"")
|
||||
newline := ""
|
||||
|
||||
if len(indices) == 0 {
|
||||
newline = line
|
||||
} else {
|
||||
for i := 0; i < len(indices); i += 2 {
|
||||
if i-1 >= 0 {
|
||||
newline += line[indices[i-1]+1 : indices[i]]
|
||||
} else {
|
||||
newline += line[:indices[i]]
|
||||
}
|
||||
|
||||
newline += "\""
|
||||
value := line[indices[i]+1 : indices[i+1]]
|
||||
|
||||
fmt.Println(value, containsChinese(value))
|
||||
if containsChinese(value) {
|
||||
translatedValue, err := translateText(value)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Println(translatedValue)
|
||||
value = translatedValue
|
||||
}
|
||||
|
||||
newline += reg.ReplaceAllString(value, "")
|
||||
newline += "\""
|
||||
}
|
||||
|
||||
newline += line[indices[len(indices)-1]+1:]
|
||||
}
|
||||
|
||||
fmt.Fprintln(w, newline)
|
||||
}
|
||||
|
||||
fmt.Printf("strings translated: %v", len(lexicon))
|
||||
}
|
||||
|
||||
func findIndices(text string, char string) []int {
|
||||
var indices []int
|
||||
|
||||
for i, c := range text {
|
||||
if string(c) == char {
|
||||
indices = append(indices, i)
|
||||
}
|
||||
}
|
||||
|
||||
if len(indices)%2 != 0 {
|
||||
return make([]int, 0)
|
||||
}
|
||||
|
||||
return indices
|
||||
}
|
||||
|
||||
func containsChinese(text string) bool {
|
||||
for _, runeValue := range text {
|
||||
if unicode.Is(unicode.Han, runeValue) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func translateText(text string) (string, error) {
|
||||
if translated, ok := lexicon[text]; ok {
|
||||
return translated, nil
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
client, err := translate.NewClient(ctx, option.WithAPIKey(googleAPIProjectKey))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer client.Close()
|
||||
|
||||
resp, err := client.Translate(ctx, []string{text}, language.English, nil)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("Translate: %v", err)
|
||||
}
|
||||
if len(resp) == 0 {
|
||||
return "", fmt.Errorf("Translate returned empty response to text: %s", text)
|
||||
}
|
||||
|
||||
lexicon[text] = resp[0].Text
|
||||
|
||||
return resp[0].Text, nil
|
||||
}
|
||||
Reference in New Issue
Block a user