NEO4J创建具有上下位关系的分类体系节点
NEO4J递归创建概念体系
在neo4j的命令行批量创建节点和关系困难,本文利用py2neo和递归算法实现批量创建具有上下位关系的分类体系节点。
数据源准备
为了表现层级关系,使用多层的字典结构。没有下层节点时,value为空字典。
{
"l1": {
"l11": {},
"l12": {}
},
"l2": {
"l21": {},
"l22": {},
"l23": {},
"l24": {}
}
}
代码实现
from py2neo import Graph, NodeMatcher, Subgraph, Relationship, Node
# 链接图数据库,创建节点匹配器
g = Graph("http://localhost:7474/browser/", user="neo4j", password="***")
def label_create(labelfile, relations):
"""
将标签概念存入图数据库
:param labelfile: 保存标签概念的字典
:param relations: 暂存关系的数组
:return: 当前层节点集合;关系集合
"""
Nodes = []
for k1, v1 in labelfile.items():
if '_' in k1:
name = k1.split('_')[0]
code = k1.split('_')[1]
conceptNode1 = Node("concept", name=name, code=code)
g.create(conceptNode1)
else:
name = k1
conceptNode1 = Node("concept", name=name)
g.create(conceptNode1)
Nodes.append(conceptNode1)
if v1:
nnn, _ = label_create(v1, relations) # 递归获取下级节点集合
for n in nnn:
rel = Relationship(n, 'SubClassOf', conceptNode1)
relations.append(rel)
return Nodes, relations
# 建立标签节点及关系
with open(self.labelpath, 'r', encoding='utf-8') as load_f:
labelfile = json.load(load_f)
relations = []
_, rrr = label_create(labelfile, relations)
sss = Subgraph(relationships=relations)
g.create(sss)

浙公网安备 33010602011771号