在用python 编码构建知识图谱的时候,要向neo4j中增加节点、关系和标签,但neo4j本身默认没有数据库的那种“关键字”的概念,就会重复添加,下面的代码可以检查这些元素是否已经存在,分享一下:
#判断标签(本体类)是否存在 def lblExist(lbl): cql = "MATCH (n:%s) RETURN count(n)"%(lbl) ret = ng.run(cql) for x in ret.data(): if x['count(n)'] > 0: print('节点已经存在.........') return True else: return False #判断节点是否存在 def nodeExist(lbl, node): cql = "MATCH(n:%s {name:'%s'}) return count(n)"%(lbl, node) ret = ng.run(cql) for x in ret.data(): if x['count(n)'] > 0: print('节点已经存在.........') return True else: return False #判断关系是否存在 sl主词的标签,el宾词的标签,sp主词,rel关系,ep宾词 def relExist(sl, el, sp ,rel, ep): cql = "MATCH(n: %s{name:'%s'}), (n1: %s{name:'%s'}), p = (n) - [r:%s] -> (n1) return count(p)"%(sl[len(names):],sp,el,ep,rel) ret = ng.run(cql) for x in ret.data(): if x['count(p)'] >0: print('关系已经存在........') return True else: return False