前言

基于知识图谱的中药药材知识图谱系统旨在利用知识图谱技术,结合高中药药材以及功效等多维度数据,为中医医生,以及用户提供较好的中药采集,通过分析中药的功效,中药的名称通过采集和分析出,中药的使用,运用智能算法进行匹配和推荐。本文在开发技术方面使用了NLP文本命名识别技术,同时使用了知识图谱关系抽取技术,在开发语言方面使用Python语言和Java语言,与此同时在设计数据库方面使用neo4j关系型数据库,而调取的数据库为MySQL数据库,主要实现了系统的功能以双页面进行展示,该系统通过构建庞大的知识图谱,布局设置(定点模式,保存布局,恢复布局),图谱操作,项目设置,智能服务,新增实体,新增关系,重置播放,另存为随机分布,保存png保存,xml,以及用户的登录注册,在线咨询,用户手册,查询中药图谱搜索关键词等功能,在此期间,进行MySQL数据库信息的调取,然后将该信息,录入到知识图谱中,形成关系抽取的模式,关系抽取的关键词,以中药的名称,以及功效进行搜索。而在NLP命名识别中,在提取相似词语时,我们采用了数据帧(df)算法来挑选关键词,同时运用了相关性算法来评估这些词语之间的关联性。进一步地,我们提出了一个新颖的相似度计算方法,该方法结合了基于词向量的jieba分词相似度和基于词向量的依存句法分析。实验结果表明,这种方法相较于传统方法,在效果上有显著的提升。此外,我们还应用这种方法进行了文本的分类与识别任务,进行智能问答的的推荐,大大提升了中药药材的知识图谱的细节化处理。

详细视频演示

文章底部名片,联系我看更详细的演示视频

一、项目介绍

开发语言:Java
框架:springboot
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
Maven包:Maven

————————————————

二、功能介绍

根据本文系统的特点,管理员主要有登录系统、知识图谱管理、用户管理、角色管理、图谱绘制记录管理、知识图谱图谱绘制和展示查询。用户具有知识图谱查询、知识图谱neo4j展示、知识图谱展示功能,图谱绘制和展示记录的查询等功能,其功能结构图如图4-1所示。
在这里插入图片描述

图4-1系统功能结构设计

三、核心代码

部分代码:


package com.example.controller;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.Caiwu;
import com.example.exception.CustomException;
import com.example.service.CaiwuService;
import com.example.utils.MapWrapperUtils;
import com.example.utils.jwt.JwtUtil;
import com.example.vo.CaiwuVo;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping(value = "/caiwu")
public class CaiwuController {

    @Resource
    private CaiwuService caiwuService;

    @PostMapping
    public Result<Caiwu> add(@RequestBody CaiwuVo caiwu) {
        caiwuService.add(caiwu);
           return Result.success(caiwu);
    }
	
	

    @PostMapping("/deleteList")
    public Result<Caiwu> deleteList(@RequestBody CaiwuVo caiwu) {
        caiwuService.deleteList(caiwu.getList());
        return Result.success();
    }

    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Long id) {
        caiwuService.delete(id);
        return Result.success();
    }

    @PutMapping
    public Result update(@RequestBody CaiwuVo caiwu) {
        caiwuService.update(caiwu);
        return Result.success();
    }

    @GetMapping("/{id}")
    public Result<Caiwu> detail(@PathVariable Integer id) {
        Caiwu caiwu = caiwuService.findById(id);
        return Result.success(caiwu);
    }

    @GetMapping
    public Result<List<Caiwu>> all() {
        return Result.success(caiwuService.list());
    }

    @PostMapping("/page")
    public Result<CaiwuVo> page(@RequestBody CaiwuVo caiwuVo) {
        return Result.success(caiwuService.findPage(caiwuVo));
    }
	    @PostMapping("/login")
    public Result login(@RequestBody Caiwu caiwu, HttpServletRequest request) {
        if (StrUtil.isBlank(caiwu.getZhanghao()) || StrUtil.isBlank(caiwu.getMima())) {
            throw new CustomException(ResultCode.PARAM_LOST_ERROR);
        }
        Caiwu login = caiwuService.login(caiwu);
//        if(!login.getStatus()){
//            return Result.error("1001","状态限制,无法登录系统");
//        }
        if(login != null) {
            HashMap hashMap = new HashMap();
            hashMap.put("user", login);
            Map<String, Object> map = MapWrapperUtils.builder(MapWrapperUtils.KEY_USER_ID,caiwu.getId());
            String token = JwtUtil.creatToken(map);
            hashMap.put("token", token);
            return Result.success(hashMap);
        }else {
            return Result.error();
        }
    }
    @PutMapping("/updatePassword")
    public Result updatePassword(@RequestBody Caiwu info, HttpServletRequest request) {
        Caiwu caiwu = caiwuService.findById(info.getId());
        String oldPassword = SecureUtil.md5(info.getMima());
        if (!oldPassword.equals(caiwu.getMima())) {
            return Result.error(ResultCode.PARAM_PASSWORD_ERROR.code, ResultCode.PARAM_PASSWORD_ERROR.msg);
        }
        info.setMima(SecureUtil.md5(info.getNewPassword()));
        Caiwu caiwu1 = new Caiwu();
        BeanUtils.copyProperties(info, caiwu1);
        caiwuService.update(caiwu1);
        return Result.success();
    }
}

数据库参考


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for graph_layout
-- ----------------------------
DROP TABLE IF EXISTS `graph_layout`;
CREATE TABLE `graph_layout`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `project_id` int(11) NOT NULL,
  `layout_type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `width` double NOT NULL DEFAULT 0,
  `height` double NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `nid`(`project_id`, `layout_type`) USING BTREE,
  INDEX `graph_layout_project_type`(`project_id`, `layout_type`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 411 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of graph_layout
-- ----------------------------

-- ----------------------------
-- Table structure for layout
-- ----------------------------
DROP TABLE IF EXISTS `layout`;
CREATE TABLE `layout`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `project_id` int(11) NOT NULL,
  `node_id` int(11) NOT NULL,
  `x_axis` double NOT NULL,
  `y_axis` double NOT NULL,
  `type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `nid`(`project_id`, `node_id`, `type`) USING BTREE,
  INDEX `project_node_type`(`project_id`, `node_id`, `type`) USING BTREE,
  INDEX `project_type`(`project_id`, `type`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6289 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of layout
-- ----------------------------

-- ----------------------------
-- Table structure for project
-- ----------------------------
DROP TABLE IF EXISTS `project`;
CREATE TABLE `project`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `description` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `user_id` int(11) NULL DEFAULT NULL,
  `status` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'PRIVATE',
  `layout_status` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'FORCE',
  `image_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 144 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of project
-- ----------------------------
INSERT INTO `project` VALUES (141, '中药知识图谱', '中药知识图谱', 181, 'PUBLIC', 'FORCE', NULL);
INSERT INTO `project` VALUES (142, '测试', '测试', 181, 'PRIVATE', 'FORCE', NULL);
INSERT INTO `project` VALUES (143, '中医药材知识图谱', '中医药材知识图谱', 1, 'PRIVATE', 'FORCE', NULL);

-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(72) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `email` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `t_user_name_uindex`(`name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 184 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES (1, 'admin', '$2a$10$MpC48gOh5T6wpSBP2Qcrse5JnRDW6EbazfY1MTnUumO3FDhXonegW', 'admin@qq.com');
INSERT INTO `t_user` VALUES (181, 'test', '$2a$10$MpC48gOh5T6wpSBP2Qcrse5JnRDW6EbazfY1MTnUumO3FDhXonegW', 'test@qq.com');
INSERT INTO `t_user` VALUES (182, 'beibei', '$2a$10$m9qbn3jTMkvmv/5ImOvareVa322uZzUi1AYCMpfjlBcRqHbKr50eu', 'beibe@qq.com');
INSERT INTO `t_user` VALUES (183, 'beituo', '$2a$10$7rfwUauIc1fBp6T1x1OeR.bURuh1ltDQ1Un9.z3aj21Crm0uWfkL.', 'beituo@qq.com');

SET FOREIGN_KEY_CHECKS = 1;


四、效果图

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

五、文章目录

目 录
绪论 6
1.1 研究背景 6
1.2研究意义 6
1.3 国内外研究现状 7
1.3.1国内研究现状 7
1.3.2国外研究现状 7
2相关技术的介绍 9
2.1知识图谱 9
2.2java语言 9
2.4命名实体识别技术 10
2.5neo4j图数据库 10
3系统分析 12
3.1系统可行性分析 12
3.2系统需求分析 12
4系统设计 17
4.1系统结构设计 17
4.2系统功能模块设计 17
4.3数据库设计 20
5系统实现 23
5.1开发环境的搭建 23
5.2数据的提取 23
5.2.1数据的来源 23
5.2.2实体的抽取 24
5.2.3关系的抽取 25
5.3智能推荐的实现 25
6系统测试 27
6.1测试目的 27
6.2 测试效果 27
6.2.1 登录功能测试 27
6.2.2 知识图谱信息管理功能测试 28
6.2.3 图谱管理功能测试 28
结 束 29
参考文献 30

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐