diff --git a/controllers/wordset.go b/controllers/wordset.go index 0f65b4d..cf6a8b2 100644 --- a/controllers/wordset.go +++ b/controllers/wordset.go @@ -35,6 +35,13 @@ func (c *ApiController) GetWordsetGraph() { c.ServeJSON() } +func (c *ApiController) GetWordsetMatch() { + id := c.Input().Get("id") + + c.Data["json"] = object.GetWordsetMatch(id) + c.ServeJSON() +} + func (c *ApiController) UpdateWordset() { id := c.Input().Get("id") diff --git a/object/vectorset.go b/object/vectorset.go index 748c462..6f68755 100644 --- a/object/vectorset.go +++ b/object/vectorset.go @@ -19,7 +19,8 @@ type Vectorset struct { Dimension int `json:"dimension"` Count int `json:"count"` - Vectors []*Vector `xorm:"mediumtext" json:"vectors"` + Vectors []*Vector `xorm:"mediumtext" json:"vectors"` + VectorMap map[string]*Vector `xorm:"-" json:"vectorMap"` } func GetGlobalVectorsets() []*Vectorset { diff --git a/object/vectorset_upload.go b/object/vectorset_upload.go index 7d3533a..55d7295 100644 --- a/object/vectorset_upload.go +++ b/object/vectorset_upload.go @@ -19,18 +19,19 @@ func (vectorset *Vectorset) LoadVectors(pathPrefix string) { } exampleVectors := []*Vector{} - for i := 0; i < 100; i++ { - if i >= len(nameArray) { - break - } - + vectorMap := map[string]*Vector{} + for i := 0; i < len(nameArray); i++ { vector := &Vector{ Name: nameArray[i], Data: dataArray[i], } - exampleVectors = append(exampleVectors, vector) + if i < 100 { + exampleVectors = append(exampleVectors, vector) + } + vectorMap[vector.Name] = vector } vectorset.Vectors = exampleVectors + vectorset.VectorMap = vectorMap } diff --git a/object/wordset_match.go b/object/wordset_match.go new file mode 100644 index 0000000..15ae174 --- /dev/null +++ b/object/wordset_match.go @@ -0,0 +1,26 @@ +package object + +func GetWordsetMatch(id string) *Wordset { + wordset := GetWordset(id) + if wordset == nil { + return nil + } + + vectorset := getVectorset(wordset.Owner, wordset.Vectorset) + if vectorset == nil { + return nil + } + + vectorset.LoadVectors("") + + for _, vector := range wordset.Vectors { + if trueVector, ok := vectorset.VectorMap[vector.Name]; ok { + vector.Data = trueVector.Data + } else { + vector.Data = []float64{} + } + } + + UpdateWordset(wordset.GetId(), wordset) + return wordset +} diff --git a/object/wordset_upload.go b/object/wordset_upload.go index 832dbc1..fbbfeaa 100644 --- a/object/wordset_upload.go +++ b/object/wordset_upload.go @@ -1,9 +1,6 @@ package object import ( - "fmt" - "strings" - "github.com/casbin/casbase/util" "github.com/casbin/casbase/xlsx" ) @@ -30,63 +27,3 @@ func uploadVectorNames(owner string, fileId string) bool { } return AddWordset(wordset) } - -func parseVectorData(s string) []float64 { - s = strings.TrimLeft(s, "[") - s = strings.TrimRight(s, "]") - s = strings.ReplaceAll(s, "\n", "") - - tokens := strings.Split(s, " ") - res := []float64{} - for _, token := range tokens { - if token == "" { - continue - } - - f := util.ParseFloat(token) - res = append(res, f) - } - return res -} - -func readVectorData(fileId string) []*Vector { - path := util.GetUploadCsvPath(fileId) - - rows := [][]string{} - util.LoadCsvFile(path, &rows) - - vectors := []*Vector{} - for _, row := range rows { - if row[0] == "" { - continue - } - - vector := &Vector{ - Name: row[1], - Data: parseVectorData(row[2]), - } - if len(vector.Data) != 128 { - panic(fmt.Errorf("invalid vector data length: %d, vector = %v", len(vector.Data), vector)) - } - - vectors = append(vectors, vector) - } - return vectors -} - -func updateWordsetVectors(owner string, wordsetName string, vectors []*Vector) { - wordset := getWordset(owner, wordsetName) - - vectorMap := map[string]*Vector{} - for _, v := range wordset.Vectors { - vectorMap[v.Name] = v - } - - for _, vector := range vectors { - if v, ok := vectorMap[vector.Name]; ok { - v.Data = vector.Data - } - } - - UpdateWordset(wordset.GetId(), wordset) -} diff --git a/object/wordset_upload_test.go b/object/wordset_upload_test.go index 4751d15..09f5f47 100644 --- a/object/wordset_upload_test.go +++ b/object/wordset_upload_test.go @@ -7,10 +7,3 @@ func TestUploadVectorNames(t *testing.T) { uploadVectorNames("admin", "../../tmpFiles/filename") } - -func TestUpdateWordsetVectors(t *testing.T) { - InitConfig() - - vectors := readVectorData("../../tmpFiles/wordVector_utf-8") - updateWordsetVectors("admin", "word", vectors) -} diff --git a/routers/router.go b/routers/router.go index b24be86..316f66b 100644 --- a/routers/router.go +++ b/routers/router.go @@ -26,6 +26,7 @@ func initAPI() { beego.Router("/api/get-wordsets", &controllers.ApiController{}, "GET:GetWordsets") beego.Router("/api/get-wordset", &controllers.ApiController{}, "GET:GetWordset") beego.Router("/api/get-wordset-graph", &controllers.ApiController{}, "GET:GetWordsetGraph") + beego.Router("/api/get-wordset-match", &controllers.ApiController{}, "GET:GetWordsetMatch") beego.Router("/api/update-wordset", &controllers.ApiController{}, "POST:UpdateWordset") beego.Router("/api/add-wordset", &controllers.ApiController{}, "POST:AddWordset") beego.Router("/api/delete-wordset", &controllers.ApiController{}, "POST:DeleteWordset") diff --git a/web/src/WordsetEditPage.js b/web/src/WordsetEditPage.js index be4df63..68a583f 100644 --- a/web/src/WordsetEditPage.js +++ b/web/src/WordsetEditPage.js @@ -103,6 +103,21 @@ class WordsetEditPage extends React.Component { + + + {i18next.t("wordset:Match")}: + + + + + {i18next.t("wordset:Matched")}: diff --git a/web/src/backend/WordsetBackend.js b/web/src/backend/WordsetBackend.js index c566ca1..c9ead5a 100644 --- a/web/src/backend/WordsetBackend.js +++ b/web/src/backend/WordsetBackend.js @@ -28,6 +28,13 @@ export function getWordsetGraph(owner, name, clusterNumber, distanceLimit) { }).then(res => res.json()); } +export function getWordsetMatch(owner, name) { + return fetch(`${Setting.ServerUrl}/api/get-wordset-match?id=${owner}/${encodeURIComponent(name)}`, { + method: "GET", + credentials: "include" + }).then(res => res.json()); +} + export function updateWordset(owner, name, wordset) { let newWordset = Setting.deepCopy(wordset); return fetch(`${Setting.ServerUrl}/api/update-wordset?id=${owner}/${encodeURIComponent(name)}`, { diff --git a/web/src/locales/en/data.json b/web/src/locales/en/data.json index e0952c9..fd49789 100644 --- a/web/src/locales/en/data.json +++ b/web/src/locales/en/data.json @@ -35,6 +35,7 @@ "All words": "All words", "Distance": "Distance", "Edit Wordset": "Edit Wordset", + "Match": "Match", "Matched": "Matched", "Valid words": "Valid words", "Vectorset": "Vectorset", diff --git a/web/src/locales/zh/data.json b/web/src/locales/zh/data.json index 868be62..3668e68 100644 --- a/web/src/locales/zh/data.json +++ b/web/src/locales/zh/data.json @@ -35,6 +35,7 @@ "All words": "所有词汇", "Distance": "距离", "Edit Wordset": "编辑词汇集", + "Match": "匹配", "Matched": "匹配度", "Valid words": "有效词汇", "Vectorset": "向量集",