267 lines
14 KiB
Vue
267 lines
14 KiB
Vue
<template>
|
||
<div>
|
||
<div class="menu-title">
|
||
知识图谱融合
|
||
</div>
|
||
<div class="menu-content">
|
||
<el-row :gutter="20">
|
||
<el-col :span="8">
|
||
<div class="result" style="margin-bottom: 20px">待融合的图谱1</div>
|
||
<el-select v-model="sourceGraph.name" placeholder="请选择要融合的知识图谱1" @change="handleSourceGraphChange">
|
||
<el-option v-for="item in resultCmd.graphs" :label="item.name" :value="item.name">
|
||
</el-option>
|
||
</el-select>
|
||
<div style="margin-top: 20px;height: 138px;border: 1px solid rgba(0, 0, 0, 0.1);padding: 20px">
|
||
<el-descriptions title="" :column="1" v-if="sourceGraph.name">
|
||
<el-descriptions-item label="概念数量">{{sourceGraph.gn_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
<el-descriptions-item label="属性数量">{{sourceGraph.sx_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
<el-descriptions-item label="实体数量">{{sourceGraph.sl_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
<el-descriptions-item label="三元组数量">{{sourceGraph.saz_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
</el-descriptions>
|
||
</div>
|
||
<div class="result">待融合的图谱2</div>
|
||
<el-select v-model="targetGraph.name" placeholder="请选择要融合的知识图谱2"
|
||
@change="handleTargetGraphChange" style="margin-top: 25px">
|
||
<el-option
|
||
v-for="item in resultCmd.graphs"
|
||
:label="item.name"
|
||
:value="item.name">
|
||
</el-option>
|
||
</el-select>
|
||
<div style="margin-top: 20px;height: 138px;border: 1px solid rgba(0, 0, 0, 0.1);padding: 20px">
|
||
<el-descriptions class="margin-top" title="" :column="1" v-if="targetGraph.name">
|
||
<el-descriptions-item label="概念数量">{{targetGraph.gn_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
<el-descriptions-item label="属性数量">{{targetGraph.sx_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
<el-descriptions-item label="实体数量">{{targetGraph.sl_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
<el-descriptions-item label="三元组数量">{{targetGraph.saz_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
</el-descriptions>
|
||
</div>
|
||
<div style="margin: 0 auto;margin-top: 25px;display: flex;justify-content: center">
|
||
<el-button type="primary" @click="fusionData" :loading="loading">开始融合</el-button>
|
||
</div>
|
||
</el-col>
|
||
<el-col :span="16" v-if="showFlag">
|
||
<el-row :gutter="50">
|
||
<el-col :span="12" >
|
||
<div class="result" style="text-align: center;width: 100%;margin-bottom: 20px;color: #5c5c5c;">本体匹配结果展示</div>
|
||
<el-table :data="btResults" style="width: 100%" height="350px" @current-change="handleCurrentChange1" highlight-current-row>
|
||
<el-table-column prop="srcNode" label="本体1"></el-table-column>
|
||
<el-table-column prop="dctNode" label="本体2"></el-table-column>
|
||
<el-table-column prop="type" label="类型"></el-table-column>
|
||
<el-table-column prop="reliability" label="匹配置信度"></el-table-column>
|
||
<el-table-column prop="result" label="匹配结果"></el-table-column>
|
||
</el-table>
|
||
<div class="page-box">
|
||
<el-pagination background
|
||
@current-change="handleChange1"
|
||
:current-page="qo1.pageNo"
|
||
:page-size="qo1.pageSize"
|
||
layout="total, prev, pager, next"
|
||
:total="resultCmd1.btResults.length">
|
||
</el-pagination>
|
||
</div>
|
||
<div style="display: flex;width: 100%;margin-top: 20px">
|
||
<el-button type="primary" size="small" style="flex: 1" @click="clickStr('currentRow1','srcNode')">验证本体1</el-button>
|
||
<el-button type="primary" size="small" style="flex: 1" @click="clickStr('currentRow1','dctNode')">验证本体2</el-button>
|
||
</div>
|
||
<div class="result">本体匹配结果: {{resultCmd1.bfb.bt_result}}</div>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<div class="result" style="text-align: center;width: 100%;margin-bottom: 20px;color: #5c5c5c;">实例匹配结果展示</div>
|
||
<el-table :data="slResults" style="width: 100%" height="350px" @current-change="handleCurrentChange2" highlight-current-row>
|
||
<el-table-column prop="srcNode" label="本体1"></el-table-column>
|
||
<el-table-column prop="dctNode" label="本体2"></el-table-column>
|
||
<el-table-column prop="type" label="类型"></el-table-column>
|
||
<el-table-column prop="reliability" label="匹配置信度"></el-table-column>
|
||
<el-table-column prop="result" label="匹配结果"></el-table-column>
|
||
</el-table>
|
||
<div class="page-box">
|
||
<el-pagination background
|
||
@current-change="handleChange2"
|
||
:current-page="qo2.pageNo"
|
||
:page-size="qo2.pageSize"
|
||
layout="total, prev, pager, next"
|
||
:total="resultCmd1.slResults.length">
|
||
</el-pagination>
|
||
</div>
|
||
<div style="display: flex;width: 100%;margin-top: 20px">
|
||
<el-button type="primary" size="small" style="flex: 1" @click="clickStr('currentRow2','srcNode')">验证本体1</el-button>
|
||
<el-button type="primary" size="small" style="flex: 1" @click="clickStr('currentRow2','dctNode')">验证本体2</el-button>
|
||
</div>
|
||
<div class="result">实例匹配结果: {{resultCmd1.bfb.sl_result}}</div>
|
||
</el-col>
|
||
</el-row>
|
||
<div class="result" style="text-align: center;width: 100%;margin-top: 20px;color: #5c5c5c;">融合后知识图谱统计信息</div>
|
||
<div style="margin-top: 20px;height:20px;border: 1px solid rgba(0, 0, 0, 0.1);padding: 20px">
|
||
<el-descriptions title="" :column="4">
|
||
<el-descriptions-item label="概念数量">{{resultCmd1.rhGraph.gn_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
<el-descriptions-item label="属性数量">{{resultCmd1.rhGraph.sx_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
<el-descriptions-item label="实体数量">{{resultCmd1.rhGraph.sl_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
<el-descriptions-item label="三元组数量">{{resultCmd1.rhGraph.saz_count.toString().replace(/(\d)(?=(?:\d{3})+$)/g,'$1,')}}</el-descriptions-item>
|
||
</el-descriptions>
|
||
</div>
|
||
</el-col>
|
||
</el-row>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import request from '@/utils/request';
|
||
|
||
var _this;
|
||
export default {
|
||
name: "knowledgeFusion",
|
||
data() {
|
||
return {
|
||
sourceGraph: {
|
||
"name": "",
|
||
"gn_count": "",
|
||
"sx_count": "",
|
||
"sl_count": "",
|
||
"saz_count": ""
|
||
},
|
||
targetGraph: {
|
||
"name": "",
|
||
"gn_count": "",
|
||
"sx_count": "",
|
||
"sl_count": "",
|
||
"saz_count": ""
|
||
},
|
||
resultCmd: {},
|
||
resultCmd1: {
|
||
bfb:{
|
||
bt_result:"",
|
||
sl_result:""
|
||
},
|
||
rhGraph: {
|
||
"gn_count": "",
|
||
"sx_count": "",
|
||
"sl_count": "",
|
||
"saz_count": ""
|
||
},
|
||
btResults:[],
|
||
slResults:[]
|
||
},
|
||
currentRow1:{},
|
||
currentRow2:{},
|
||
qo1:{
|
||
pageNo:1,
|
||
pageSize:10
|
||
},
|
||
qo2:{
|
||
pageNo:1,
|
||
pageSize:10
|
||
},
|
||
btResults:[],
|
||
slResults:[],
|
||
showFlag: false,
|
||
loading:false
|
||
}
|
||
},
|
||
mounted() {
|
||
_this = this;
|
||
_this.queryData();
|
||
},
|
||
methods: {
|
||
handleSourceGraphChange() {
|
||
_this.resultCmd.graphs.forEach(item => {
|
||
if(item.name == _this.sourceGraph.name){
|
||
_this.sourceGraph = JSON.parse(JSON.stringify(item))
|
||
}
|
||
})
|
||
console.log(_this.resultCmd.graphs)
|
||
},
|
||
handleTargetGraphChange() {
|
||
_this.resultCmd.graphs.forEach(item => {
|
||
if(item.name == _this.targetGraph.name){
|
||
_this.targetGraph = JSON.parse(JSON.stringify(item))
|
||
}
|
||
})
|
||
},
|
||
handleChange1(val) {
|
||
_this.qo1.pageNo = val;
|
||
_this.btResults = _this.resultCmd1.btResults.slice((_this.qo1.pageNo - 1) * 10, _this.qo1.pageNo * 10);
|
||
},
|
||
handleChange2(val) {
|
||
_this.qo2.pageNo = val;
|
||
_this.slResults = _this.resultCmd1.slResults.slice((_this.qo2.pageNo - 1) * 10, _this.qo2.pageNo * 10);
|
||
},
|
||
fusionData(){
|
||
if(_this.targetGraph.name == _this.sourceGraph.name){
|
||
_this.$message.warning("待融合图谱1和待融合图谱2不可相同");
|
||
return false;
|
||
}
|
||
_this.queryResult();
|
||
},
|
||
queryData() {
|
||
request({
|
||
url: '/indicator/indicator4/1',
|
||
method: 'get',
|
||
}).then(res => {
|
||
_this.resultCmd = res.data;
|
||
if(_this.resultCmd.graphs.length >= 2){
|
||
_this.sourceGraph = JSON.parse(JSON.stringify(_this.resultCmd.graphs[0]))
|
||
_this.targetGraph = JSON.parse(JSON.stringify(_this.resultCmd.graphs[1]))
|
||
}
|
||
});
|
||
},
|
||
queryResult() {
|
||
_this.loading = true
|
||
request({
|
||
url: '/indicator/indicator4/2',
|
||
method: 'get',
|
||
}).then(res => {
|
||
_this.loading = false
|
||
_this.resultCmd1 = res.data;
|
||
_this.$nextTick(()=>{
|
||
_this.showFlag = true;
|
||
_this.handleChange1(1);
|
||
_this.handleChange2(1);
|
||
})
|
||
});
|
||
},
|
||
handleCurrentChange1(val) {
|
||
this.currentRow1 = val;
|
||
},
|
||
handleCurrentChange2(val) {
|
||
this.currentRow2 = val;
|
||
},
|
||
clickStr(name,value){
|
||
if(!this[name][value]){
|
||
_this.$message.warning("请选中行");
|
||
return false;
|
||
}
|
||
|
||
var srcNode = this[name][value];
|
||
|
||
if(srcNode.substring(0,1) == '<'){
|
||
srcNode = srcNode.substring(1)
|
||
}
|
||
|
||
if(srcNode.substring(srcNode.length-3) == '> .'){
|
||
srcNode = srcNode.substring(0,srcNode.length-3)
|
||
}
|
||
|
||
if(srcNode.substring(srcNode.length-1) == '>'){
|
||
srcNode = srcNode.substring(0,srcNode.length-1)
|
||
}
|
||
|
||
window.open(srcNode, "_blank")
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped lang="scss">
|
||
.result {
|
||
text-align: center;
|
||
margin-top: 25px;
|
||
font-size: 16px;
|
||
color: #5c5c5c;
|
||
}
|
||
|
||
</style>
|
||
|
||
|