分布式机器 静态IP 短视频开发 Eclipse angularjs elasticsearch neo4j model vue前端 vue开发教程 后台管理页面模板 spark项目 erp系统源码 jquery去掉空格 float占几个字节 h5下拉刷新 oracle给表增加字段 php获取当天的0点时间戳 数据库学习 python内置库 python中的range函数 python字符串匹配 安装java环境 java中的队列 java什么是多态 java课程学习 java替换字符串 java时间戳转换 java重命名 javahttp java运行 js四舍五入 数据库系统概论第五版 联发科p70 矩阵分析与应用 netreflector windowsjs延时函数 视频旋转软件 日志软件 ps图层蒙版实例教程
当前位置: 首页 > 学习教程  > 编程语言

Day3-Neo4j图数据库导入数据

2021/1/13 20:29:14 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

Task 3 Neo4j图数据库导入数据 1.Neo4j图数据库安装 进官方网站:https://neo4j.com/下载neo4j桌面版或者community版本的,自行安装好。 运行neo4j前,需要安装jdk 1.8.0的版本。配置好环境后,在命令行中输入:java -v…

Task 3 Neo4j图数据库导入数据

1.Neo4j图数据库安装

进官方网站:https://neo4j.com/下载neo4j桌面版或者community版本的,自行安装好。

运行neo4j前,需要安装jdk 1.8.0的版本。配置好环境后,在命令行中输入:java -version,查看是否安装成功。

图片.png

注:neo4j和jdk都需要配置环境变量!!!

测试neo4j是否安装成功,在命令行中输入:neo4j.bat console,如下图 3 所示:

图片.png

如图 4 所示,已经开启了neo4j数据库,配置成功后,可以在浏览器中使用http://localhost:7474/browser/网址查看数据库,但是前提是得把桌面的应用程序关掉。

注:记住数据库的用户名和密码,一般默认的是:用户:neo4j, 密码:neo4j。

图片.png

注:首次登陆会提醒你修改密码!!!

2.项目知识图谱构建

  • 本次组队学习搭建的系统的知识图谱结构如下:

知识图谱结构

  • 知识图谱实体类型

知识图谱实体类型

  • 知识图谱实体关系类型

知识图谱实体关系类型

  • 知识图谱疾病属性

知识图谱疾病属性

  • 基于特征词分类的方法来识别用户查询意图

基于特征词分类的方法来识别用户查询意图

2.1 主体类 MedicalGraph 介绍

class MedicalGraph:
    def __init__(self):
        pass
    
    # 读取文件,获得实体,实体关系
    def read_file(self):
        psss
    # 创建节点
    def create_node(self, label, nodes):
        pass
    # 创建疾病节点的属性
    def create_diseases_nodes(self, disease_info):
        pass
    # 创建知识图谱实体
    def create_graphNodes(self):
        pass
    # 创建实体关系边
    def create_graphRels(self):
        pass
    # 创建实体关系边
    def create_relationship(self, start_node, end_node, edges, rel_type, rel_name):
        pass

2.2 创建节点

这部分代码主要是为了创建不包含属性的节点。

    def create_node(self, label, nodes):
        """
        创建节点
        :param label: 标签
        :param nodes: 节点
        :return:
        """
        count = 0
        for node_name in nodes:
            node = Node(label, name=node_name)
            self.graph.create(node)
            count += 1
            print(count, len(nodes))
        return

2.3 创建带有属性节点

 def create_diseases_nodes(self, disease_info):
        """
        创建疾病节点的属性
        :param disease_info: list(Dict)
        :return:
        """
        count = 0
        for disease_dict in disease_info:
            node = Node("Disease", name=disease_dict['name'], age=disease_dict['age'],
                        infection=disease_dict['infection'], insurance=disease_dict['insurance'],
                        treatment=disease_dict['treatment'], checklist=disease_dict['checklist'],
                        period=disease_dict['period'], rate=disease_dict['rate'],
                        money=disease_dict['money'])
            self.graph.create(node)
            count += 1
            print(count)
        return

2.4 创建知识图谱实体

def create_graphNodes(self):
        """
        创建知识图谱实体
        :return:
        """
        disease, symptom, alias, part, department, complication, drug, rel_alias, rel_symptom, rel_part, \
        rel_department, rel_complication, rel_drug, rel_infos = self.read_file()
        self.create_diseases_nodes(rel_infos)
        self.create_node("Symptom", symptom)
        self.create_node("Alias", alias)
        self.create_node("Part", part)
        self.create_node("Department", department)
        self.create_node("Complication", complication)
        self.create_node("Drug", drug)

        return

2.5 创建知识图谱关系

 def create_graphRels(self):
        disease, symptom, alias, part, department, complication, drug, rel_alias, rel_symptom, rel_part, \
        rel_department, rel_complication, rel_drug, rel_infos = self.read_file()

        self.create_relationship("Disease", "Alias", rel_alias, "ALIAS_IS", "别名")
        self.create_relationship("Disease", "Symptom", rel_symptom, "HAS_SYMPTOM", "症状")
        self.create_relationship("Disease", "Part", rel_part, "PART_IS", "发病部位")
        self.create_relationship("Disease", "Department", rel_department, "DEPARTMENT_IS", "所属科室")
        self.create_relationship("Disease", "Complication", rel_complication, "HAS_COMPLICATION", "并发症")
        self.create_relationship("Disease", "Drug", rel_drug, "HAS_DRUG", "药品")

2.6 创建实体关系边

def create_relationship(self, start_node, end_node, edges, rel_type, rel_name):
        """
        创建实体关系边
        :param start_node:
        :param end_node:
        :param edges:
        :param rel_type:
        :param rel_name:
        :return:
        """
        count = 0
        # 去重处理
        set_edges = []
        for edge in edges:
            set_edges.append('###'.join(edge))
        all = len(set(set_edges))
        for edge in set(set_edges):
            edge = edge.split('###')
            p = edge[0]
            q = edge[1]
            query = "match(p:%s),(q:%s) where p.name='%s'and q.name='%s' create (p)-[rel:%s{name:'%s'}]->(q)" % (
                start_node, end_node, p, q, rel_type, rel_name)
            try:
                self.graph.run(query)
                count += 1
                print(rel_type, count, all)
            except Exception as e:
                print(e)
        return

3.总结

这块需要自己下来好好消化一下,建议可以debug看看每一步处理前后数据的变化情况,加深自己的理解。


本文链接: http://www.dtmao.cc/news_show_600335.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?