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": "向量集",