Rename to wordset.

This commit is contained in:
Haifeng Luo 2022-04-10 11:17:36 +08:00
parent 8e436bebf5
commit 069b86d324
19 changed files with 249 additions and 249 deletions

View File

@ -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()
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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")
}

View File

@ -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")

View File

@ -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>

View File

@ -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";

View File

@ -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}/>
)
}
}

View File

@ -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;

View File

@ -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")}&nbsp;&nbsp;&nbsp;&nbsp;
<Button type="primary" onClick={this.submitDatasetEdit.bind(this)}>{i18next.t("general:Save")}</Button>
{i18next.t("wordset:Edit Wordset")}&nbsp;&nbsp;&nbsp;&nbsp;
<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;

View File

@ -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")}&nbsp;&nbsp;&nbsp;&nbsp;
<Button type="primary" size="small" onClick={this.addDataset.bind(this)}>{i18next.t("general:Add")}</Button>
{i18next.t("general:Wordsets")}&nbsp;&nbsp;&nbsp;&nbsp;
<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;

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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"
}
}

View File

@ -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": "向量"
}
}