Rename to wordset.
This commit is contained in:
parent
8e436bebf5
commit
069b86d324
|
@ -7,65 +7,65 @@ import (
|
|||
"github.com/openbrain/openbrain/util"
|
||||
)
|
||||
|
||||
func (c *ApiController) GetGlobalDatasets() {
|
||||
c.Data["json"] = object.GetGlobalDatasets()
|
||||
func (c *ApiController) GetGlobalWordsets() {
|
||||
c.Data["json"] = object.GetGlobalWordsets()
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
func (c *ApiController) GetDatasets() {
|
||||
func (c *ApiController) GetWordsets() {
|
||||
owner := c.Input().Get("owner")
|
||||
|
||||
c.Data["json"] = object.GetDatasets(owner)
|
||||
c.Data["json"] = object.GetWordsets(owner)
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
func (c *ApiController) GetDataset() {
|
||||
func (c *ApiController) GetWordset() {
|
||||
id := c.Input().Get("id")
|
||||
|
||||
c.Data["json"] = object.GetDataset(id)
|
||||
c.Data["json"] = object.GetWordset(id)
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
func (c *ApiController) GetDatasetGraph() {
|
||||
func (c *ApiController) GetWordsetGraph() {
|
||||
id := c.Input().Get("id")
|
||||
clusterNumber := util.ParseInt(c.Input().Get("clusterNumber"))
|
||||
distanceLimit := util.ParseInt(c.Input().Get("distanceLimit"))
|
||||
|
||||
c.Data["json"] = object.GetDatasetGraph(id, clusterNumber, distanceLimit)
|
||||
c.Data["json"] = object.GetWordsetGraph(id, clusterNumber, distanceLimit)
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
func (c *ApiController) UpdateDataset() {
|
||||
func (c *ApiController) UpdateWordset() {
|
||||
id := c.Input().Get("id")
|
||||
|
||||
var dataset object.Dataset
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataset)
|
||||
var wordset object.Wordset
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &wordset)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c.Data["json"] = object.UpdateDataset(id, &dataset)
|
||||
c.Data["json"] = object.UpdateWordset(id, &wordset)
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
func (c *ApiController) AddDataset() {
|
||||
var dataset object.Dataset
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataset)
|
||||
func (c *ApiController) AddWordset() {
|
||||
var wordset object.Wordset
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &wordset)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c.Data["json"] = object.AddDataset(&dataset)
|
||||
c.Data["json"] = object.AddWordset(&wordset)
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
func (c *ApiController) DeleteDataset() {
|
||||
var dataset object.Dataset
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataset)
|
||||
func (c *ApiController) DeleteWordset() {
|
||||
var wordset object.Wordset
|
||||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &wordset)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
c.Data["json"] = object.DeleteDataset(&dataset)
|
||||
c.Data["json"] = object.DeleteWordset(&wordset)
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
|
|
@ -85,7 +85,7 @@ func (a *Adapter) close() {
|
|||
}
|
||||
|
||||
func (a *Adapter) createTable() {
|
||||
err := a.engine.Sync2(new(Dataset))
|
||||
err := a.engine.Sync2(new(Wordset))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
"xorm.io/core"
|
||||
)
|
||||
|
||||
type Dataset struct {
|
||||
type Wordset struct {
|
||||
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
|
||||
Name string `xorm:"varchar(100) notnull pk" json:"name"`
|
||||
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
|
||||
|
@ -18,52 +18,52 @@ type Dataset struct {
|
|||
Vectors []*Vector `xorm:"mediumtext" json:"vectors"`
|
||||
}
|
||||
|
||||
func GetGlobalDatasets() []*Dataset {
|
||||
datasets := []*Dataset{}
|
||||
err := adapter.engine.Asc("owner").Desc("created_time").Find(&datasets)
|
||||
func GetGlobalWordsets() []*Wordset {
|
||||
wordsets := []*Wordset{}
|
||||
err := adapter.engine.Asc("owner").Desc("created_time").Find(&wordsets)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return datasets
|
||||
return wordsets
|
||||
}
|
||||
|
||||
func GetDatasets(owner string) []*Dataset {
|
||||
datasets := []*Dataset{}
|
||||
err := adapter.engine.Desc("created_time").Find(&datasets, &Dataset{Owner: owner})
|
||||
func GetWordsets(owner string) []*Wordset {
|
||||
wordsets := []*Wordset{}
|
||||
err := adapter.engine.Desc("created_time").Find(&wordsets, &Wordset{Owner: owner})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return datasets
|
||||
return wordsets
|
||||
}
|
||||
|
||||
func getDataset(owner string, name string) *Dataset {
|
||||
dataset := Dataset{Owner: owner, Name: name}
|
||||
existed, err := adapter.engine.Get(&dataset)
|
||||
func getWordset(owner string, name string) *Wordset {
|
||||
wordset := Wordset{Owner: owner, Name: name}
|
||||
existed, err := adapter.engine.Get(&wordset)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if existed {
|
||||
return &dataset
|
||||
return &wordset
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func GetDataset(id string) *Dataset {
|
||||
func GetWordset(id string) *Wordset {
|
||||
owner, name := util.GetOwnerAndNameFromId(id)
|
||||
return getDataset(owner, name)
|
||||
return getWordset(owner, name)
|
||||
}
|
||||
|
||||
func UpdateDataset(id string, dataset *Dataset) bool {
|
||||
func UpdateWordset(id string, wordset *Wordset) bool {
|
||||
owner, name := util.GetOwnerAndNameFromId(id)
|
||||
if getDataset(owner, name) == nil {
|
||||
if getWordset(owner, name) == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
_, err := adapter.engine.ID(core.PK{owner, name}).AllCols().Update(dataset)
|
||||
_, err := adapter.engine.ID(core.PK{owner, name}).AllCols().Update(wordset)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -72,8 +72,8 @@ func UpdateDataset(id string, dataset *Dataset) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func AddDataset(dataset *Dataset) bool {
|
||||
affected, err := adapter.engine.Insert(dataset)
|
||||
func AddWordset(wordset *Wordset) bool {
|
||||
affected, err := adapter.engine.Insert(wordset)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -81,8 +81,8 @@ func AddDataset(dataset *Dataset) bool {
|
|||
return affected != 0
|
||||
}
|
||||
|
||||
func DeleteDataset(dataset *Dataset) bool {
|
||||
affected, err := adapter.engine.ID(core.PK{dataset.Owner, dataset.Name}).Delete(&Dataset{})
|
||||
func DeleteWordset(wordset *Wordset) bool {
|
||||
affected, err := adapter.engine.ID(core.PK{wordset.Owner, wordset.Name}).Delete(&Wordset{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -90,6 +90,6 @@ func DeleteDataset(dataset *Dataset) bool {
|
|||
return affected != 0
|
||||
}
|
||||
|
||||
func (dataset *Dataset) GetId() string {
|
||||
return fmt.Sprintf("%s/%s", dataset.Owner, dataset.Name)
|
||||
func (wordset *Wordset) GetId() string {
|
||||
return fmt.Sprintf("%s/%s", wordset.Owner, wordset.Name)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ func init() {
|
|||
graphCache = map[string]*Graph{}
|
||||
}
|
||||
|
||||
func GetDatasetGraph(id string, clusterNumber int, distanceLimit int) *Graph {
|
||||
func GetWordsetGraph(id string, clusterNumber int, distanceLimit int) *Graph {
|
||||
cacheId := fmt.Sprintf("%s|%d|%d", id, clusterNumber, distanceLimit)
|
||||
|
||||
g, ok := graphCache[cacheId]
|
||||
|
@ -23,14 +23,14 @@ func GetDatasetGraph(id string, clusterNumber int, distanceLimit int) *Graph {
|
|||
return g
|
||||
}
|
||||
|
||||
dataset := GetDataset(id)
|
||||
if dataset == nil {
|
||||
wordset := GetWordset(id)
|
||||
if wordset == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
runKmeans(dataset.Vectors, clusterNumber)
|
||||
runKmeans(wordset.Vectors, clusterNumber)
|
||||
|
||||
g = generateGraph(dataset.Vectors, distanceLimit)
|
||||
g = generateGraph(wordset.Vectors, distanceLimit)
|
||||
graphCache[cacheId] = g
|
||||
return g
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ func uploadVectorNames(owner string, fileId string) bool {
|
|||
vectors = append(vectors, vector)
|
||||
}
|
||||
|
||||
dataset := &Dataset{
|
||||
wordset := &Wordset{
|
||||
Owner: owner,
|
||||
Name: "word",
|
||||
CreatedTime: util.GetCurrentTime(),
|
||||
|
@ -28,7 +28,7 @@ func uploadVectorNames(owner string, fileId string) bool {
|
|||
Distance: 100,
|
||||
Vectors: vectors,
|
||||
}
|
||||
return AddDataset(dataset)
|
||||
return AddWordset(wordset)
|
||||
}
|
||||
|
||||
func parseVectorData(s string) []float64 {
|
||||
|
@ -74,11 +74,11 @@ func readVectorData(fileId string) []*Vector {
|
|||
return vectors
|
||||
}
|
||||
|
||||
func updateDatasetVectors(owner string, datasetName string, vectors []*Vector) {
|
||||
dataset := getDataset(owner, datasetName)
|
||||
func updateWordsetVectors(owner string, wordsetName string, vectors []*Vector) {
|
||||
wordset := getWordset(owner, wordsetName)
|
||||
|
||||
vectorMap := map[string]*Vector{}
|
||||
for _, v := range dataset.Vectors {
|
||||
for _, v := range wordset.Vectors {
|
||||
vectorMap[v.Name] = v
|
||||
}
|
||||
|
||||
|
@ -88,5 +88,5 @@ func updateDatasetVectors(owner string, datasetName string, vectors []*Vector) {
|
|||
}
|
||||
}
|
||||
|
||||
UpdateDataset(dataset.GetId(), dataset)
|
||||
UpdateWordset(wordset.GetId(), wordset)
|
||||
}
|
||||
|
|
|
@ -8,9 +8,9 @@ func TestUploadVectorNames(t *testing.T) {
|
|||
uploadVectorNames("admin", "../../tmpFiles/【最原始版】词汇表—单行—去重后")
|
||||
}
|
||||
|
||||
func TestUpdateDatasetVectors(t *testing.T) {
|
||||
func TestUpdateWordsetVectors(t *testing.T) {
|
||||
InitConfig()
|
||||
|
||||
vectors := readVectorData("../../tmpFiles/wordVector_utf-8")
|
||||
updateDatasetVectors("admin", "word", vectors)
|
||||
updateWordsetVectors("admin", "word", vectors)
|
||||
}
|
||||
|
|
|
@ -58,10 +58,10 @@ func runKmeans(vectors []*Vector, clusterNumber int) {
|
|||
}
|
||||
}
|
||||
|
||||
func updateDatasetVectorCategories(owner string, datasetName string) {
|
||||
dataset := getDataset(owner, datasetName)
|
||||
func updateWordsetVectorCategories(owner string, wordsetName string) {
|
||||
wordset := getWordset(owner, wordsetName)
|
||||
|
||||
runKmeans(dataset.Vectors, 100)
|
||||
runKmeans(wordset.Vectors, 100)
|
||||
|
||||
UpdateDataset(dataset.GetId(), dataset)
|
||||
UpdateWordset(wordset.GetId(), wordset)
|
||||
}
|
||||
|
|
|
@ -2,8 +2,8 @@ package object
|
|||
|
||||
import "testing"
|
||||
|
||||
func TestUpdateDatasetVectorCategories(t *testing.T) {
|
||||
func TestUpdateWordsetVectorCategories(t *testing.T) {
|
||||
InitConfig()
|
||||
|
||||
updateDatasetVectorCategories("admin", "word")
|
||||
updateWordsetVectorCategories("admin", "word")
|
||||
}
|
||||
|
|
|
@ -23,13 +23,13 @@ func initAPI() {
|
|||
beego.Router("/api/signout", &controllers.ApiController{}, "POST:Signout")
|
||||
beego.Router("/api/get-account", &controllers.ApiController{}, "GET:GetAccount")
|
||||
|
||||
beego.Router("/api/get-global-datasets", &controllers.ApiController{}, "GET:GetGlobalDatasets")
|
||||
beego.Router("/api/get-datasets", &controllers.ApiController{}, "GET:GetDatasets")
|
||||
beego.Router("/api/get-dataset", &controllers.ApiController{}, "GET:GetDataset")
|
||||
beego.Router("/api/get-dataset-graph", &controllers.ApiController{}, "GET:GetDatasetGraph")
|
||||
beego.Router("/api/update-dataset", &controllers.ApiController{}, "POST:UpdateDataset")
|
||||
beego.Router("/api/add-dataset", &controllers.ApiController{}, "POST:AddDataset")
|
||||
beego.Router("/api/delete-dataset", &controllers.ApiController{}, "POST:DeleteDataset")
|
||||
beego.Router("/api/get-global-wordsets", &controllers.ApiController{}, "GET:GetGlobalWordsets")
|
||||
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/update-wordset", &controllers.ApiController{}, "POST:UpdateWordset")
|
||||
beego.Router("/api/add-wordset", &controllers.ApiController{}, "POST:AddWordset")
|
||||
beego.Router("/api/delete-wordset", &controllers.ApiController{}, "POST:DeleteWordset")
|
||||
|
||||
beego.Router("/api/get-global-vectorsets", &controllers.ApiController{}, "GET:GetGlobalVectorsets")
|
||||
beego.Router("/api/get-vectorsets", &controllers.ApiController{}, "GET:GetVectorsets")
|
||||
|
|
|
@ -8,8 +8,8 @@ import * as AccountBackend from "./backend/AccountBackend";
|
|||
import AuthCallback from "./AuthCallback";
|
||||
import * as Conf from "./Conf";
|
||||
import HomePage from "./HomePage";
|
||||
import DatasetListPage from "./DatasetListPage";
|
||||
import DatasetEditPage from "./DatasetEditPage";
|
||||
import WordsetListPage from "./WordsetListPage";
|
||||
import WordsetEditPage from "./WordsetEditPage";
|
||||
import VectorsetListPage from "./VectorsetListPage";
|
||||
import VectorsetEditPage from "./VectorsetEditPage";
|
||||
import SigninPage from "./SigninPage";
|
||||
|
@ -53,8 +53,8 @@ class App extends Component {
|
|||
});
|
||||
if (uri === '/') {
|
||||
this.setState({selectedMenuKey: '/'});
|
||||
} else if (uri.includes('/datasets')) {
|
||||
this.setState({ selectedMenuKey: '/datasets' });
|
||||
} else if (uri.includes('/wordsets')) {
|
||||
this.setState({ selectedMenuKey: '/wordsets' });
|
||||
} else if (uri.includes('/vectorsets')) {
|
||||
this.setState({ selectedMenuKey: '/vectorsets' });
|
||||
} else {
|
||||
|
@ -217,9 +217,9 @@ class App extends Component {
|
|||
);
|
||||
|
||||
res.push(
|
||||
<Menu.Item key="/datasets">
|
||||
<Link to="/datasets">
|
||||
{i18next.t("general:Datasets")}
|
||||
<Menu.Item key="/wordsets">
|
||||
<Link to="/wordsets">
|
||||
{i18next.t("general:Wordsets")}
|
||||
</Link>
|
||||
</Menu.Item>
|
||||
);
|
||||
|
@ -280,8 +280,8 @@ class App extends Component {
|
|||
<Route exact path="/callback" component={AuthCallback}/>
|
||||
<Route exact path="/" render={(props) => <HomePage account={this.state.account} {...props} />}/>
|
||||
<Route exact path="/signin" render={(props) => this.renderHomeIfSignedIn(<SigninPage {...props} />)}/>
|
||||
<Route exact path="/datasets" render={(props) => this.renderSigninIfNotSignedIn(<DatasetListPage account={this.state.account} {...props} />)}/>
|
||||
<Route exact path="/datasets/:datasetName" render={(props) => this.renderSigninIfNotSignedIn(<DatasetEditPage account={this.state.account} {...props} />)}/>
|
||||
<Route exact path="/wordsets" render={(props) => this.renderSigninIfNotSignedIn(<WordsetListPage account={this.state.account} {...props} />)}/>
|
||||
<Route exact path="/wordsets/:wordsetName" render={(props) => this.renderSigninIfNotSignedIn(<WordsetEditPage account={this.state.account} {...props} />)}/>
|
||||
<Route exact path="/vectorsets" render={(props) => this.renderSigninIfNotSignedIn(<VectorsetListPage account={this.state.account} {...props} />)}/>
|
||||
<Route exact path="/vectorsets/:vectorsetName" render={(props) => this.renderSigninIfNotSignedIn(<VectorsetEditPage account={this.state.account} {...props} />)}/>
|
||||
</Switch>
|
||||
|
|
|
@ -8,7 +8,7 @@ export const AuthConfig = {
|
|||
};
|
||||
|
||||
export const DefaultOwner = "admin";
|
||||
export const DefaultDatasetName = "word";
|
||||
export const DefaultWordsetName = "word";
|
||||
|
||||
export const ForceLanguage = "";
|
||||
export const DefaultLanguage = "en";
|
||||
|
|
|
@ -1,33 +1,33 @@
|
|||
import React from "react";
|
||||
import * as Conf from "./Conf";
|
||||
import * as DatasetBackend from "./backend/DatasetBackend";
|
||||
import Dataset from "./Dataset";
|
||||
import * as WordsetBackend from "./backend/WordsetBackend";
|
||||
import Wordset from "./Wordset";
|
||||
|
||||
class HomePage extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
classes: props,
|
||||
dataset: null,
|
||||
wordset: null,
|
||||
};
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.getDataset();
|
||||
this.getWordset();
|
||||
}
|
||||
|
||||
getDataset() {
|
||||
DatasetBackend.getDataset(Conf.DefaultOwner, Conf.DefaultDatasetName)
|
||||
.then((dataset) => {
|
||||
getWordset() {
|
||||
WordsetBackend.getWordset(Conf.DefaultOwner, Conf.DefaultWordsetName)
|
||||
.then((wordset) => {
|
||||
this.setState({
|
||||
dataset: dataset,
|
||||
wordset: wordset,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
return (this.state.dataset === undefined || this.state.dataset === null) ? null : (
|
||||
<Dataset dataset={this.state.dataset} datasetName={this.state.dataset.name}/>
|
||||
return (this.state.wordset === undefined || this.state.wordset === null) ? null : (
|
||||
<Wordset wordset={this.state.wordset} wordsetName={this.state.wordset.name}/>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import {Button, Card, Col, Empty, InputNumber, List, Row, Select, Slider, Spin,
|
|||
import ForceGraph2D from 'react-force-graph-2d';
|
||||
import ForceGraph3D from 'react-force-graph-3d';
|
||||
import * as d3 from "d3-force";
|
||||
import * as DatasetBackend from "./backend/DatasetBackend";
|
||||
import * as WordsetBackend from "./backend/WordsetBackend";
|
||||
import i18next from "i18next";
|
||||
|
||||
const { Option } = Select;
|
||||
|
@ -31,12 +31,12 @@ class ForceGraph extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
class Dataset extends React.Component {
|
||||
class Wordset extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
classes: props,
|
||||
datasetName: props.datasetName !== undefined ? props.datasetName : props.match.params.datasetName,
|
||||
wordsetName: props.wordsetName !== undefined ? props.wordsetName : props.match.params.wordsetName,
|
||||
graph: null,
|
||||
enableStatic: false,
|
||||
// enableCurve: true,
|
||||
|
@ -54,15 +54,15 @@ class Dataset extends React.Component {
|
|||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.getDatasetGraph();
|
||||
this.getWordsetGraph();
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState, snapshot) {
|
||||
fg.current?.d3Force('collision', d3.forceCollide(15));
|
||||
}
|
||||
|
||||
getDatasetGraph() {
|
||||
DatasetBackend.getDatasetGraph("admin", this.state.datasetName, this.state.clusterNumber, this.state.distanceLimit)
|
||||
getWordsetGraph() {
|
||||
WordsetBackend.getWordsetGraph("admin", this.state.wordsetName, this.state.clusterNumber, this.state.distanceLimit)
|
||||
.then((graph) => {
|
||||
this.setState({
|
||||
graph: graph,
|
||||
|
@ -322,7 +322,7 @@ class Dataset extends React.Component {
|
|||
this.setState({
|
||||
graph: null,
|
||||
});
|
||||
this.getDatasetGraph();
|
||||
this.getWordsetGraph();
|
||||
}}>
|
||||
重新聚类
|
||||
</Button>
|
||||
|
@ -462,4 +462,4 @@ class Dataset extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
export default Dataset;
|
||||
export default Wordset;
|
|
@ -1,57 +1,57 @@
|
|||
import React from "react";
|
||||
import {Button, Card, Col, Input, InputNumber, Row} from 'antd';
|
||||
import * as DatasetBackend from "./backend/DatasetBackend";
|
||||
import * as WordsetBackend from "./backend/WordsetBackend";
|
||||
import * as Setting from "./Setting";
|
||||
import i18next from "i18next";
|
||||
import VectorTable from "./VectorTable";
|
||||
import Dataset from "./Dataset";
|
||||
import Wordset from "./Wordset";
|
||||
|
||||
class DatasetEditPage extends React.Component {
|
||||
class WordsetEditPage extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
classes: props,
|
||||
datasetName: props.match.params.datasetName,
|
||||
dataset: null,
|
||||
wordsetName: props.match.params.wordsetName,
|
||||
wordset: null,
|
||||
};
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.getDataset();
|
||||
this.getWordset();
|
||||
}
|
||||
|
||||
getDataset() {
|
||||
DatasetBackend.getDataset(this.props.account.name, this.state.datasetName)
|
||||
.then((dataset) => {
|
||||
getWordset() {
|
||||
WordsetBackend.getWordset(this.props.account.name, this.state.wordsetName)
|
||||
.then((wordset) => {
|
||||
this.setState({
|
||||
dataset: dataset,
|
||||
wordset: wordset,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
parseDatasetField(key, value) {
|
||||
parseWordsetField(key, value) {
|
||||
if (["score"].includes(key)) {
|
||||
value = Setting.myParseInt(value);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
updateDatasetField(key, value) {
|
||||
value = this.parseDatasetField(key, value);
|
||||
updateWordsetField(key, value) {
|
||||
value = this.parseWordsetField(key, value);
|
||||
|
||||
let dataset = this.state.dataset;
|
||||
dataset[key] = value;
|
||||
let wordset = this.state.wordset;
|
||||
wordset[key] = value;
|
||||
this.setState({
|
||||
dataset: dataset,
|
||||
wordset: wordset,
|
||||
});
|
||||
}
|
||||
|
||||
renderDataset() {
|
||||
renderWordset() {
|
||||
return (
|
||||
<Card size="small" title={
|
||||
<div>
|
||||
{i18next.t("dataset:Edit Dataset")}
|
||||
<Button type="primary" onClick={this.submitDatasetEdit.bind(this)}>{i18next.t("general:Save")}</Button>
|
||||
{i18next.t("wordset:Edit Wordset")}
|
||||
<Button type="primary" onClick={this.submitWordsetEdit.bind(this)}>{i18next.t("general:Save")}</Button>
|
||||
</div>
|
||||
} style={{marginLeft: '5px'}} type="inner">
|
||||
<Row style={{marginTop: '10px'}} >
|
||||
|
@ -59,8 +59,8 @@ class DatasetEditPage extends React.Component {
|
|||
{i18next.t("general:Name")}:
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<Input value={this.state.dataset.name} onChange={e => {
|
||||
this.updateDatasetField('name', e.target.value);
|
||||
<Input value={this.state.wordset.name} onChange={e => {
|
||||
this.updateWordsetField('name', e.target.value);
|
||||
}} />
|
||||
</Col>
|
||||
</Row>
|
||||
|
@ -69,30 +69,30 @@ class DatasetEditPage extends React.Component {
|
|||
{i18next.t("general:Display name")}:
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<Input value={this.state.dataset.displayName} onChange={e => {
|
||||
this.updateDatasetField('displayName', e.target.value);
|
||||
<Input value={this.state.wordset.displayName} onChange={e => {
|
||||
this.updateWordsetField('displayName', e.target.value);
|
||||
}} />
|
||||
</Col>
|
||||
</Row>
|
||||
<Row style={{marginTop: '20px'}} >
|
||||
<Col style={{marginTop: '5px'}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{i18next.t("dataset:Distance")}:
|
||||
{i18next.t("wordset:Distance")}:
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<InputNumber value={this.state.dataset.distance} onChange={value => {
|
||||
this.updateDatasetField('distance', value);
|
||||
<InputNumber value={this.state.wordset.distance} onChange={value => {
|
||||
this.updateWordsetField('distance', value);
|
||||
}} />
|
||||
</Col>
|
||||
</Row>
|
||||
<Row style={{marginTop: '20px'}} >
|
||||
<Col style={{marginTop: '5px'}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{i18next.t("dataset:Vectors")}:
|
||||
{i18next.t("wordset:Vectors")}:
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<VectorTable
|
||||
title={i18next.t("dataset:Vectors")}
|
||||
table={this.state.dataset.vectors}
|
||||
onUpdateTable={(value) => { this.updateDatasetField('vectors', value)}}
|
||||
title={i18next.t("wordset:Vectors")}
|
||||
table={this.state.wordset.vectors}
|
||||
onUpdateTable={(value) => { this.updateWordsetField('vectors', value)}}
|
||||
/>
|
||||
</Col>
|
||||
</Row>
|
||||
|
@ -101,26 +101,26 @@ class DatasetEditPage extends React.Component {
|
|||
{i18next.t("general:Preview")}:
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<Dataset dataset={this.state.dataset} datasetName={this.state.dataset.name} />
|
||||
<Wordset wordset={this.state.wordset} wordsetName={this.state.wordset.name} />
|
||||
</Col>
|
||||
</Row>
|
||||
</Card>
|
||||
)
|
||||
}
|
||||
|
||||
submitDatasetEdit() {
|
||||
let dataset = Setting.deepCopy(this.state.dataset);
|
||||
DatasetBackend.updateDataset(this.state.dataset.owner, this.state.datasetName, dataset)
|
||||
submitWordsetEdit() {
|
||||
let wordset = Setting.deepCopy(this.state.wordset);
|
||||
WordsetBackend.updateWordset(this.state.wordset.owner, this.state.wordsetName, wordset)
|
||||
.then((res) => {
|
||||
if (res) {
|
||||
Setting.showMessage("success", `Successfully saved`);
|
||||
this.setState({
|
||||
datasetName: this.state.dataset.name,
|
||||
wordsetName: this.state.wordset.name,
|
||||
});
|
||||
this.props.history.push(`/datasets/${this.state.dataset.name}`);
|
||||
this.props.history.push(`/wordsets/${this.state.wordset.name}`);
|
||||
} else {
|
||||
Setting.showMessage("error", `failed to save: server side failure`);
|
||||
this.updateDatasetField('name', this.state.datasetName);
|
||||
this.updateWordsetField('name', this.state.wordsetName);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
|
@ -136,7 +136,7 @@ class DatasetEditPage extends React.Component {
|
|||
</Col>
|
||||
<Col span={22}>
|
||||
{
|
||||
this.state.dataset !== null ? this.renderDataset() : null
|
||||
this.state.wordset !== null ? this.renderWordset() : null
|
||||
}
|
||||
</Col>
|
||||
<Col span={1}>
|
||||
|
@ -146,7 +146,7 @@ class DatasetEditPage extends React.Component {
|
|||
<Col span={2}>
|
||||
</Col>
|
||||
<Col span={18}>
|
||||
<Button type="primary" size="large" onClick={this.submitDatasetEdit.bind(this)}>{i18next.t("general:Save")}</Button>
|
||||
<Button type="primary" size="large" onClick={this.submitWordsetEdit.bind(this)}>{i18next.t("general:Save")}</Button>
|
||||
</Col>
|
||||
</Row>
|
||||
</div>
|
||||
|
@ -154,4 +154,4 @@ class DatasetEditPage extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
export default DatasetEditPage;
|
||||
export default WordsetEditPage;
|
|
@ -3,72 +3,72 @@ import {Link} from "react-router-dom";
|
|||
import {Button, Col, Popconfirm, Row, Table} from 'antd';
|
||||
import moment from "moment";
|
||||
import * as Setting from "./Setting";
|
||||
import * as DatasetBackend from "./backend/DatasetBackend";
|
||||
import * as WordsetBackend from "./backend/WordsetBackend";
|
||||
import i18next from "i18next";
|
||||
|
||||
class DatasetListPage extends React.Component {
|
||||
class WordsetListPage extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
classes: props,
|
||||
datasets: null,
|
||||
wordsets: null,
|
||||
};
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.getDatasets();
|
||||
this.getWordsets();
|
||||
}
|
||||
|
||||
getDatasets() {
|
||||
DatasetBackend.getDatasets(this.props.account.name)
|
||||
getWordsets() {
|
||||
WordsetBackend.getWordsets(this.props.account.name)
|
||||
.then((res) => {
|
||||
this.setState({
|
||||
datasets: res,
|
||||
wordsets: res,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
newDataset() {
|
||||
newWordset() {
|
||||
return {
|
||||
owner: this.props.account.name,
|
||||
name: `dataset_${this.state.datasets.length}`,
|
||||
name: `wordset_${this.state.wordsets.length}`,
|
||||
createdTime: moment().format(),
|
||||
displayName: `Dataset ${this.state.datasets.length}`,
|
||||
displayName: `Wordset ${this.state.wordsets.length}`,
|
||||
distance: 100,
|
||||
vectors: [],
|
||||
}
|
||||
}
|
||||
|
||||
addDataset() {
|
||||
const newDataset = this.newDataset();
|
||||
DatasetBackend.addDataset(newDataset)
|
||||
addWordset() {
|
||||
const newWordset = this.newWordset();
|
||||
WordsetBackend.addWordset(newWordset)
|
||||
.then((res) => {
|
||||
Setting.showMessage("success", `Dataset added successfully`);
|
||||
Setting.showMessage("success", `Wordset added successfully`);
|
||||
this.setState({
|
||||
datasets: Setting.prependRow(this.state.datasets, newDataset),
|
||||
wordsets: Setting.prependRow(this.state.wordsets, newWordset),
|
||||
});
|
||||
}
|
||||
)
|
||||
.catch(error => {
|
||||
Setting.showMessage("error", `Dataset failed to add: ${error}`);
|
||||
Setting.showMessage("error", `Wordset failed to add: ${error}`);
|
||||
});
|
||||
}
|
||||
|
||||
deleteDataset(i) {
|
||||
DatasetBackend.deleteDataset(this.state.datasets[i])
|
||||
deleteWordset(i) {
|
||||
WordsetBackend.deleteWordset(this.state.wordsets[i])
|
||||
.then((res) => {
|
||||
Setting.showMessage("success", `Dataset deleted successfully`);
|
||||
Setting.showMessage("success", `Wordset deleted successfully`);
|
||||
this.setState({
|
||||
datasets: Setting.deleteRow(this.state.datasets, i),
|
||||
wordsets: Setting.deleteRow(this.state.wordsets, i),
|
||||
});
|
||||
}
|
||||
)
|
||||
.catch(error => {
|
||||
Setting.showMessage("error", `Dataset failed to delete: ${error}`);
|
||||
Setting.showMessage("error", `Wordset failed to delete: ${error}`);
|
||||
});
|
||||
}
|
||||
|
||||
renderTable(datasets) {
|
||||
renderTable(wordsets) {
|
||||
const columns = [
|
||||
{
|
||||
title: i18next.t("general:Name"),
|
||||
|
@ -78,7 +78,7 @@ class DatasetListPage extends React.Component {
|
|||
sorter: (a, b) => a.name.localeCompare(b.name),
|
||||
render: (text, record, index) => {
|
||||
return (
|
||||
<Link to={`/datasets/${text}`}>
|
||||
<Link to={`/wordsets/${text}`}>
|
||||
{text}
|
||||
</Link>
|
||||
)
|
||||
|
@ -92,14 +92,14 @@ class DatasetListPage extends React.Component {
|
|||
sorter: (a, b) => a.displayName.localeCompare(b.displayName),
|
||||
},
|
||||
{
|
||||
title: i18next.t("dataset:Distance"),
|
||||
title: i18next.t("wordset:Distance"),
|
||||
dataIndex: 'distance',
|
||||
key: 'distance',
|
||||
width: '120px',
|
||||
sorter: (a, b) => a.distance - b.distance,
|
||||
},
|
||||
{
|
||||
title: i18next.t("dataset:Vectors"),
|
||||
title: i18next.t("wordset:Vectors"),
|
||||
dataIndex: 'vectors',
|
||||
key: 'vectors',
|
||||
// width: '120px',
|
||||
|
@ -109,7 +109,7 @@ class DatasetListPage extends React.Component {
|
|||
}
|
||||
},
|
||||
{
|
||||
title: i18next.t("dataset:All vectors"),
|
||||
title: i18next.t("wordset:All vectors"),
|
||||
dataIndex: 'allVectors',
|
||||
key: 'allVectors',
|
||||
width: '140px',
|
||||
|
@ -119,7 +119,7 @@ class DatasetListPage extends React.Component {
|
|||
}
|
||||
},
|
||||
{
|
||||
title: i18next.t("dataset:Valid vectors"),
|
||||
title: i18next.t("wordset:Valid vectors"),
|
||||
dataIndex: 'validVectors',
|
||||
key: 'validVectors',
|
||||
width: '140px',
|
||||
|
@ -136,10 +136,10 @@ class DatasetListPage extends React.Component {
|
|||
render: (text, record, index) => {
|
||||
return (
|
||||
<div>
|
||||
<Button style={{marginTop: '10px', marginBottom: '10px', marginRight: '10px'}} type="primary" onClick={() => this.props.history.push(`/datasets/${record.name}`)}>{i18next.t("general:Edit")}</Button>
|
||||
<Button style={{marginTop: '10px', marginBottom: '10px', marginRight: '10px'}} type="primary" onClick={() => this.props.history.push(`/wordsets/${record.name}`)}>{i18next.t("general:Edit")}</Button>
|
||||
<Popconfirm
|
||||
title={`Sure to delete dataset: ${record.name} ?`}
|
||||
onConfirm={() => this.deleteDataset(index)}
|
||||
title={`Sure to delete wordset: ${record.name} ?`}
|
||||
onConfirm={() => this.deleteWordset(index)}
|
||||
okText="OK"
|
||||
cancelText="Cancel"
|
||||
>
|
||||
|
@ -153,14 +153,14 @@ class DatasetListPage extends React.Component {
|
|||
|
||||
return (
|
||||
<div>
|
||||
<Table columns={columns} dataSource={datasets} rowKey="name" size="middle" bordered pagination={{pageSize: 100}}
|
||||
<Table columns={columns} dataSource={wordsets} rowKey="name" size="middle" bordered pagination={{pageSize: 100}}
|
||||
title={() => (
|
||||
<div>
|
||||
{i18next.t("general:Datasets")}
|
||||
<Button type="primary" size="small" onClick={this.addDataset.bind(this)}>{i18next.t("general:Add")}</Button>
|
||||
{i18next.t("general:Wordsets")}
|
||||
<Button type="primary" size="small" onClick={this.addWordset.bind(this)}>{i18next.t("general:Add")}</Button>
|
||||
</div>
|
||||
)}
|
||||
loading={datasets === null}
|
||||
loading={wordsets === null}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
@ -174,7 +174,7 @@ class DatasetListPage extends React.Component {
|
|||
</Col>
|
||||
<Col span={22}>
|
||||
{
|
||||
this.renderTable(this.state.datasets)
|
||||
this.renderTable(this.state.wordsets)
|
||||
}
|
||||
</Col>
|
||||
<Col span={1}>
|
||||
|
@ -185,4 +185,4 @@ class DatasetListPage extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
export default DatasetListPage;
|
||||
export default WordsetListPage;
|
|
@ -1,56 +0,0 @@
|
|||
import * as Setting from "../Setting";
|
||||
|
||||
export function getGlobalDatasets() {
|
||||
return fetch(`${Setting.ServerUrl}/api/get-global-datasets`, {
|
||||
method: "GET",
|
||||
credentials: "include"
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function getDatasets(owner) {
|
||||
return fetch(`${Setting.ServerUrl}/api/get-datasets?owner=${owner}`, {
|
||||
method: "GET",
|
||||
credentials: "include"
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function getDataset(owner, name) {
|
||||
return fetch(`${Setting.ServerUrl}/api/get-dataset?id=${owner}/${encodeURIComponent(name)}`, {
|
||||
method: "GET",
|
||||
credentials: "include"
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function getDatasetGraph(owner, name, clusterNumber, distanceLimit) {
|
||||
return fetch(`${Setting.ServerUrl}/api/get-dataset-graph?id=${owner}/${encodeURIComponent(name)}&clusterNumber=${clusterNumber}&distanceLimit=${distanceLimit}`, {
|
||||
method: "GET",
|
||||
credentials: "include"
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function updateDataset(owner, name, dataset) {
|
||||
let newDataset = Setting.deepCopy(dataset);
|
||||
return fetch(`${Setting.ServerUrl}/api/update-dataset?id=${owner}/${encodeURIComponent(name)}`, {
|
||||
method: 'POST',
|
||||
credentials: 'include',
|
||||
body: JSON.stringify(newDataset),
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function addDataset(dataset) {
|
||||
let newDataset = Setting.deepCopy(dataset);
|
||||
return fetch(`${Setting.ServerUrl}/api/add-dataset`, {
|
||||
method: 'POST',
|
||||
credentials: 'include',
|
||||
body: JSON.stringify(newDataset),
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function deleteDataset(dataset) {
|
||||
let newDataset = Setting.deepCopy(dataset);
|
||||
return fetch(`${Setting.ServerUrl}/api/delete-dataset`, {
|
||||
method: 'POST',
|
||||
credentials: 'include',
|
||||
body: JSON.stringify(newDataset),
|
||||
}).then(res => res.json());
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
import * as Setting from "../Setting";
|
||||
|
||||
export function getGlobalWordsets() {
|
||||
return fetch(`${Setting.ServerUrl}/api/get-global-wordsets`, {
|
||||
method: "GET",
|
||||
credentials: "include"
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function getWordsets(owner) {
|
||||
return fetch(`${Setting.ServerUrl}/api/get-wordsets?owner=${owner}`, {
|
||||
method: "GET",
|
||||
credentials: "include"
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function getWordset(owner, name) {
|
||||
return fetch(`${Setting.ServerUrl}/api/get-wordset?id=${owner}/${encodeURIComponent(name)}`, {
|
||||
method: "GET",
|
||||
credentials: "include"
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function getWordsetGraph(owner, name, clusterNumber, distanceLimit) {
|
||||
return fetch(`${Setting.ServerUrl}/api/get-wordset-graph?id=${owner}/${encodeURIComponent(name)}&clusterNumber=${clusterNumber}&distanceLimit=${distanceLimit}`, {
|
||||
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)}`, {
|
||||
method: 'POST',
|
||||
credentials: 'include',
|
||||
body: JSON.stringify(newWordset),
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function addWordset(wordset) {
|
||||
let newWordset = Setting.deepCopy(wordset);
|
||||
return fetch(`${Setting.ServerUrl}/api/add-wordset`, {
|
||||
method: 'POST',
|
||||
credentials: 'include',
|
||||
body: JSON.stringify(newWordset),
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function deleteWordset(wordset) {
|
||||
let newWordset = Setting.deepCopy(wordset);
|
||||
return fetch(`${Setting.ServerUrl}/api/delete-wordset`, {
|
||||
method: 'POST',
|
||||
credentials: 'include',
|
||||
body: JSON.stringify(newWordset),
|
||||
}).then(res => res.json());
|
||||
}
|
|
@ -5,18 +5,10 @@
|
|||
"Sign Out": "Sign Out",
|
||||
"Sign Up": "Sign Up"
|
||||
},
|
||||
"dataset": {
|
||||
"All vectors": "All vectors",
|
||||
"Distance": "Distance",
|
||||
"Edit Dataset": "Edit Dataset",
|
||||
"Valid vectors": "Valid vectors",
|
||||
"Vectors": "Vectors"
|
||||
},
|
||||
"general": {
|
||||
"Action": "Action",
|
||||
"Add": "Add",
|
||||
"Data": "Data",
|
||||
"Datasets": "Datasets",
|
||||
"Delete": "Delete",
|
||||
"Display name": "Display name",
|
||||
"Edit": "Edit",
|
||||
|
@ -27,7 +19,8 @@
|
|||
"Preview": "Preview",
|
||||
"Save": "Save",
|
||||
"URL": "URL",
|
||||
"Vectorsets": "Vectorsets"
|
||||
"Vectorsets": "Vectorsets",
|
||||
"Wordsets": "Wordsets"
|
||||
},
|
||||
"vectorset": {
|
||||
"Count": "Count",
|
||||
|
@ -36,5 +29,12 @@
|
|||
"Example vectors": "Example vectors",
|
||||
"File name": "File name",
|
||||
"File size": "File size"
|
||||
},
|
||||
"wordset": {
|
||||
"All vectors": "All vectors",
|
||||
"Distance": "Distance",
|
||||
"Edit Wordset": "Edit Wordset",
|
||||
"Valid vectors": "Valid vectors",
|
||||
"Vectors": "Vectors"
|
||||
}
|
||||
}
|
|
@ -5,18 +5,10 @@
|
|||
"Sign Out": "登出",
|
||||
"Sign Up": "注册"
|
||||
},
|
||||
"dataset": {
|
||||
"All vectors": "所有向量",
|
||||
"Distance": "距离",
|
||||
"Edit Dataset": "编辑数据集",
|
||||
"Valid vectors": "有效向量",
|
||||
"Vectors": "向量"
|
||||
},
|
||||
"general": {
|
||||
"Action": "操作",
|
||||
"Add": "添加",
|
||||
"Data": "数据",
|
||||
"Datasets": "数据集",
|
||||
"Delete": "删除",
|
||||
"Display name": "显示名称",
|
||||
"Edit": "编辑",
|
||||
|
@ -27,7 +19,8 @@
|
|||
"Preview": "预览",
|
||||
"Save": "保存",
|
||||
"URL": "链接",
|
||||
"Vectorsets": "向量集"
|
||||
"Vectorsets": "向量集",
|
||||
"Wordsets": "词汇集"
|
||||
},
|
||||
"vectorset": {
|
||||
"Count": "个数",
|
||||
|
@ -36,5 +29,12 @@
|
|||
"Example vectors": "示例向量",
|
||||
"File name": "文件名",
|
||||
"File size": "文件大小"
|
||||
},
|
||||
"wordset": {
|
||||
"All vectors": "所有向量",
|
||||
"Distance": "距离",
|
||||
"Edit Wordset": "编辑词汇集",
|
||||
"Valid vectors": "有效向量",
|
||||
"Vectors": "向量"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue