# System for Constructing and Visualizing Knowledge Graph
[TOC]
## 功能
* 知识图谱项目创建
* 知识图谱可视化定义
* 节点创建、编辑、删除
* 关系创建、编辑、删除
* 知识图谱布局编辑
* 力导向图模式
* 排版模式
* 自由模式
* 支持不同布局下的独立调整及持久化
* 知识图谱导出
* 导出为png
* 导出为xml(可用于创建)
* 知识图谱问答(食谱领域)
* 关系查询
* 节点查询
* 中心识别
* neo4j page rank
> 演示效果见[用户手册](./用户手册.md)
>
> 启动相关见[部署文档](./部署文档.md)
## 总体架构
![arch](https://cyzblog.oss-cn-beijing.aliyuncs.com/arch.png)
## 服务端设计
> 在服务端,分为知识图谱服务和智能应用服务两个微服务
>
> * 知识图谱服务:包括用户管理、项目管理、图谱管理、微服务管理四个模块,主要负责知识图谱定义部分,使用 Spring Boot 搭建,是前端调用的总入口。
> * 智能应用服务:提供知识图谱智能问答的算法支持,作为微服务,请求由知识图谱服务统一转发。
### 知识图谱服务
![依赖包图3](https://cyzblog.oss-cn-beijing.aliyuncs.com/依赖包图3.png)
#### 用户管理模块
用户管理模块主要负责授权、认证,核心技术使用了
* 对称加密与非对称加密
* Spring Security
![sec3_secury](https://cyzblog.oss-cn-beijing.aliyuncs.com/sec3_secury.png)
#### 微服务调用模块
微服务调用模块,但由于在系统中仅有两个微服务,且为异构的服务(分别基于 Java 和 Python),这里并没有引入 Spring Cloud 作为微服务的框架,而是借用其思想自己实现了服务的注册、发现与调用。
配置文件:
```yml
# python微服务
pyserver:
url: http://127.0.0.1:5000
```
* **服务调用**
在服务调用上,使用RestTemplate进行统一的转发
* **服务发现**
在服务发现上,使用心跳机制来与微服务通信。
在 Flask 服务中,提供接口`/health` 返回微服务状态
在 Spring Boot 服务中,启动一个线程对该接口进行监听,如果发现微服务异常,则对所有将转发到 Flask 服务的请求进行熔断。
![microservice](https://cyzblog.oss-cn-beijing.aliyuncs.com/microservice.png)
#### Helper模块
helper模块用于根据用户的自然语言,找到符合条件的项目
![sec3-helper](https://cyzblog.oss-cn-beijing.aliyuncs.com/sec3-helper.png)
#### 项目管理模块
项目管理中,很多数据的是读多写少的,在这里引入 Spring Cache 进行缓存管理。
#### 图谱管理模块
图谱管理模块中,持久层的使用方案如下:
* MySQL: 存储布局信息
* Neo4j: 存储图节点、关系信息
* Redis: 缓存及图id生成
### 智能应用服务设计
![KBQA](https://cyzblog.oss-cn-beijing.aliyuncs.com/KBQA.png)
#### 图谱构建
我们从[美食天下](https://www.meishichina.com/)中爬取了每菜系的100种菜谱,根据菜谱名字的规律,进行了数据清洗,并导入到neo4j数据库中。
清洗后并导出的数据已放在/load/export文件夹下,导入neo4j的流程如下
* 进入到neo4j文件夹,`cd /opt/neo4j-community-3.5.28`
* 将/load/export下的文件拷贝到imports目录中
* `bin/stop` 停止服务
* `rm -rf data/databases/graph.db/` 删除原数据(注意备份有用数据!)
* `bin/neo4j-admin import --nodes=import/caixi.csv --nodes=import/shicai.csv --nodes=import/caipu.csv --relationships=import/belong.csv --relationships=import/zhushicai.csv --relationships=import/fuliao.csv --multiline-fields=true` 导入
* `bin/start` 启动服务
* 由于数据类型的原因,需要进行id的类型转换
```CQL
match ()-[r]->() set r.relationId=toInteger(r.relationId) return r;
match (n) set n.nodeId=toInteger(n.nodeId) return n;
```
#### KBQA
**问题类型设计**
| 问题类型 | 中文含义 | 问题举例 |
| -------------------- | ---------------------- | -------------------- |
| food_query✔ | 查询菜谱属性 | 烤肠怎么做 |
| food_constraint✔ | 查询符合约束的菜 | 微辣的炒菜有哪些 |
| desc_recipe ✔ | 描述菜谱 | 红烧肉 |
| desc_cuisine ✔ | 描述菜系 | 闽菜 |
| desc_material ✔ | 描述食材 | 五花肉 |
| ingredients✔ | 食材查询 | 红烧肉用什么做 |
| ingredients_prime✔ | 主食材查询 | 红烧肉的主食材是什么 |
| ingredients_sub✔ | 辅料查询 | 红烧肉的辅料是什么 |
| ingredients_num✔ | 查询所需食材的量 | 红烧肉要用多少五花肉 |
| ingredients_include✔ | 某个菜是否用了某个东西 | 红烧肉要用五花肉吗? |
| food_belong✔ | 查询菜的菜系 | 红烧肉属于什么菜系? |
| cuisine_food✔ | 查询菜系有哪些菜 | 闽菜有哪些美食? |
| cuisine_query ✔ | 查询菜系 | 有哪些菜系的菜 |
| unknown✔ | 不知道 | 我帅吗 |
注:food_query实际上分为:
* food_query_zuofa
* food_query_kouwei
* food_query_gongyi
* food_query_leixing
* food_query_kouwei
**回答设计**
* 无法识别问题:抱歉,小助手听不懂您的问题。
* 找不到答案:抱歉,小助手暂时无法回答您的问题。
#### Centrality Algorithm
使用 neo4j-gds 自带的[中心算法](https://neo4j.com/docs/graph-data-science/current/algorithms/centrality/),这里选用 [Page Rank](https://neo4j.com/docs/graph-data-science/current/algorithms/page-rank/) 进行实现
## 数据库设计
| 数据库 | 存储内容 |
| ------ | -------------------- |
| MySQL | 存储布局信息 |
| Neo4j | 存储图节点、关系信息 |
| Redis | 缓存及图id生成 |
## 前端设计
### 前端整体架构
- 页面主要模块
- 用户入口 User:登录/注册
- 主页 Home:用户项目管理、其他模块入口
- 知识图谱展示 Graph:知识图谱的展示、编辑、导出
- 图谱智能助手 SmartHelper:图谱问答、实体/关系查询、中心识别
- 页面核心中间件、三方库工具
- 前端开发框架基础 Vue
- 页面路由 Vue Router
- 全局状态管理 Vuex
- 页面样式组件库 ElementUI
- 图谱可视化 D3
- 数据统计可视化 EChart
- 智能助手问答页面 JwChat
![](https://cyzblog.oss-cn-beijing.aliyuncs.com/fe_structure.png)
### 图谱页面设计
- 核心模块
- 图谱展示核心 GraphBoard
- 图谱操作面板 GraphEditor
- 图谱搜索 GraphEditorSearch
- 实体/关系的新增、修改、删除、细节查看 GraphEditorItem
- 图谱数据统计 GraphStatistics
- 侧边操作栏 GraphSideBar
- 布局模式、布局保存/恢复 GraphLayout
- 新增实体/关系、图谱缩放重置、图谱导出 GraphAction
- 智能服务
- 项目设置
![](https://cyzblog.oss-cn-beijing.aliyuncs.com/fe_structure_graph.png)
### 图谱页面数据流
- 事件驱动模型
- 由 GraphBoard 保存核心图数据
- 其他模块引用图数据进行展示
- 其他模块向 GraphBoard 发起事件修改视图
![](https://cyzblog.oss-cn-beijing.aliyuncs.com/fe_data_flow_graph.png)
### 详细设计模块
- 底层代码模块划分
- api 后端交互封装
- assets 静态资源(图片)
- common 全局共用模块
- views 主要视图
- modules 主要视图模块
- router 页面路由
- store 全局状态管理
![](https://cyzblog.oss-cn-beijing.aliyuncs.com/fe_code_structure.png)
### 视图模块细节
- 每个主要视图在 `modules/` 下拥有一个包、每个包包含下列结构
- components 子视图/组件
- utils 视图内部工具函数
- store 视�
没有合适的资源?快使用搜索试试~ 我知道了~
Java毕业设计 基于SpringBoot+Vue的可编辑知识图谱的菜肴问答可视化系统源码+部署文档+全部数据资料(高分项目)
共236个文件
java:98个
js:52个
vue:38个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 133 浏览量
2024-04-23
16:55:06
上传
评论
收藏 2.79MB ZIP 举报
温馨提示
【资源说明】 Java毕业设计 基于SpringBoot+Vue的可编辑知识图谱的菜肴问答可视化系统源码+部署文档+全部数据资料 构建一个能通过在线编辑基本图元,以可视化的方式构建知识图谱的系统 平台,并能对构建后的知识图谱进行智能化知识图谱应用,实现知识图谱语义搜索、知识图谱智能问答等 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
Java毕业设计 基于SpringBoot+Vue的可编辑知识图谱的菜肴问答可视化系统源码+部署文档+全部数据资料(高分项目) (236个子文件)
.babelrc 402B
.editorconfig 167B
.eslintrc 58B
.gitignore 324B
.gitignore 175B
.gitignore 47B
.gitkeep 0B
guide.html 71KB
systemdesign.html 41KB
index.html 341B
GraphServiceImpl.java 13KB
RelationRepositoryTest.java 10KB
ProjectController.java 9KB
ProjectServiceImpl.java 9KB
GraphServiceTest.java 8KB
ProjectServiceTest.java 8KB
NodeRepositoryTest.java 7KB
GraphController.java 6KB
JWTAuthenticationFilter.java 6KB
QAServiceTest.java 5KB
QAServiceImpl.java 5KB
RelationRepository.java 4KB
UserServiceImpl.java 4KB
WebSecurityConfig.java 4KB
LayoutServiceImpl.java 4KB
JwtTokenUtils.java 4KB
AppController.java 4KB
NodeLayoutMapperTest.java 4KB
ProjectMapperTest.java 4KB
RedisConfig.java 3KB
ResetController.java 3KB
RSAManager.java 3KB
UserController.java 3KB
ProjectMapper.java 3KB
NodeRepository.java 3KB
GraphIdRepository.java 2KB
GraphLayoutMapperTest.java 2KB
HeartBeating.java 2KB
LayoutServiceTest.java 2KB
XmlTest.java 2KB
GraphService.java 2KB
ProjectService.java 2KB
LayoutMapper.java 2KB
RestConfig.java 2KB
UserServiceTest.java 2KB
LayoutDTO.java 2KB
CORSConfig.java 2KB
UserPO.java 1KB
Swagger2Conf.java 1KB
ResponseUtils.java 1KB
SecurityChecker.java 1KB
RelationDTO.java 1KB
ProjectDTO.java 1KB
LayoutService.java 1KB
AliOssService.java 1KB
ProjectDetailVO.java 1KB
RelationXMLO.java 1KB
NodeDTO.java 1KB
RedisTest.java 1KB
UserMapperTest.java 1KB
NodePO.java 1KB
NodeVO.java 1005B
GraphLayoutMapper.java 994B
QAService.java 984B
RelationPO.java 976B
MyBatisConfig.java 968B
NodeWithRelationPO.java 951B
ProjectCreateVO.java 951B
RelationVO.java 844B
GraphXMLO.java 819B
ProjectDescriptionVO.java 788B
ResponseEnum.java 742B
GraphVO.java 735B
NodeXMLO.java 730B
GraphLayoutPO.java 708B
LayoutVO.java 708B
ProjectPO.java 698B
ResponseVO.java 669B
ProjectLayoutVO.java 638B
UserService.java 635B
UserMapper.java 625B
NodeRelVO.java 604B
NodeIdVO.java 573B
COINWebApplication.java 572B
NodeRelNodeVO.java 554B
ProjectImageVO.java 535B
UserInfoVO.java 497B
RelationIdVO.java 489B
GraphAnswerVO.java 474B
EntityQueryVO.java 454B
ProjectNameVO.java 451B
QuestionVO.java 445B
FlaskAnswerVO.java 436B
LayoutTypeEnum.java 419B
Neo4jConfig.java 417B
NodeLayoutPO.java 414B
PageHelper.java 411B
HelperQuestionVO.java 370B
ProjectStatusEnum.java 361B
UserVO.java 347B
共 236 条
- 1
- 2
- 3
资源评论
不走小道
- 粉丝: 3199
- 资源: 4969
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功