目录
1.Neo4j介绍
Neo4j 是当前较为主流和先进的原生图数据库之一,提供原生的图数据存储、检索和处理。它由 Neo Technology支持,从 2003 年开始开发,1.0 版本发布于 2010 年,2.0版本发布于 2013 年。
经过十多年的发展,Neo4j 获得越来越高的关注度,它已经从一个 Java 领域内的图数据库逐渐发展成为适应多语言多框架的图数据库。
Neo4j 支持ACID、集群、备份和故障转移,具有较高的可用性和稳定性;它具备非常好的直观性,通过图形化的界面表示节点和关系;同时它具备较高的可扩展性,能够承载上亿的节点、关系和属性,通过 REST 接口或者面向对象的 JAVA API进行访问。
1.1.数据
Neo4j中的数据分成三部分:
- 节点。节点表示对象实例,每个节点有唯一的ID区别其它节点,节点带有属性
- 关系。就是图里面的边,连接两个节点,另外这里的关系是有向的并带有属性
- 属性。key-value对,存在于节点和关系中
1.2.索引
Neo4j使用遍历操作进行查询。为了加速查询,Neo4j会建立索引,并根据索引找到遍历用的起始节点。
- 操作:
用户可以创建任意数量的命名索引。每个索引控制节点或者关系,而每个索引都通过key/value/object三个参数来工作。
其中object要么是一个节点,要么是一个关系,取决于索引类型。另外,Neo4j中有关于节点(关系)的索引,系统通过索引实现从属性到节点(关系)的映射。 - 作用:
- 查找操作:系统通过设定访问条件比如,遍历的方向,使用深度优先或广度优先算法等条件对图进行遍历,从一个节点沿着关系到其他节点;
- 删除操作:Neo4j可以快速的插入删除节点和关系,并更新节点和关系中的属性。
Neo4j的安装和简单语句见知识图谱task01
知识图谱task01
2.医疗领域知识图谱(QASystemOnMedicalGraph)介绍
2.1.数据集介绍
知识图谱的node:
知识图谱的relationship:
知识图谱中node疾病的属性:
基于特征词分类的方法来识别用户查询意图:
2.2.代码介绍
2.2.1.在build_graph.py中创建知识图谱
总体一览
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
具体来看
- __init__初始化
获取数据路径
cur_dir = '/'.join(os.path.abspath(__file__).split('/')[:-1])
self.data_path = os.path.join(cur_dir, 'DATA/disease.csv')
链接 Neo4j 图数据库
self.graph = Graph("http://localhost:7474", username="neo4j", password="自己设定的密码")
- readfile读取文件
这部分代码的核心就是读取 数据文件,并获取实体和实体关系信息。 - creat_node函数
创建不包含属性的节点 - create_diseases_nodes函数
创建带有属性节点(疾病) - create_graphNodes
创建知识图谱实体,调用创建疾病节点和创建节点的函数 - create_graphRels
创建知识图谱关系 - create_relationship函数
创建实体关系边
QASystemOnMedicalGraph的安装和操作见知识图谱task02
知识图谱task02
3.我的配置步骤
因为0.20之后scikit-learn中的joblib移出去了,运行QASystem的时候就会报错无法从sklearn.externals import joblib,而直接安装joblib将原来的from sklearn.externals import joblib改为直接import joblib也会报错,故而尝试将含有sklearn的scikit-learn设定为低版本(0.20以前)。
由于我的Anaconda的python是3.8版本,无法安装低版本的scikit-learn包。故而在conda环境下新建一个python3.7的虚拟环境。
conda info --env
查看conda的环境
conda creat -n env_name python=3.7
env_name为自己定义的虚拟环境名字,建立一个python为3.7的环境
conda deactivate
退出虚拟环境
activate env_name
激活这个3.7的虚拟环境
conda remove -n env_name --all
删除虚拟环境
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
添加清华大学的安装包仓库
conda config --set show_channel_urls yes
确认
conda install scikit-learn=0.20.3
安装特定版本的包
conda install
一系列要用的包:pyahocorasick
,jieba
,gensim
,numpy
,pandas
在entity_extractor.py里面添加data_dir的定义:
data_dir='C:\\datawhale\\neo4j\\QASystemOnMedicalGraph\\data\\'