您的位置:首页 > 其它

菜哥学知识图谱(通过“基于医疗知识图谱的问答系统”)(五)(neo4j的Cypher语言)

2020-06-06 04:45 309 查看

上接菜哥学知识图谱(通过“基于医疗知识图谱的问答系统”)(四)(代码分析2)

五一比平常还忙…把代码暂时放一放,插播一点Cypher语言。
为将来提高论文的逼格,有必要增加点高大上的图片。比如下面这种:

先运行neo4j:

打开neo4j的网页。

在这里写入Cypher语言:

写入:

match(m{name:'百日咳'})-[n]-(p) return m,n,p

运行,后出现上图。可在图片右上角的下载图标,选第一个导出成png图片。

简单解释一下语句。
match :关键字,查询,类似sql里面的select
()括起来的,是节点;{}括起来的是属性。[]括起来的是关系。语句中间的划线-是格式,节点-关系-节点。这里这个划线-没带箭头,就是关系的方向不做限制。
m:自己起的,代表节点的变量(将查询结果赋值m)。p同m。
n:边的变量。
上面的语句,意思就是:查询(match)节点m-关系n-节点p,其中节点m属性为name:‘百日咳’。然后返回节点m、关系n、节点p。
n、p没有给出任何类型或属性限制,就是查询所有的与m有关系的节点。

可以尝试给关系一个限制,挑选一下关系。在n后面添加类型:

match(m{name:'百日咳'})-[n:acompany_with]-(p) return m,n,p
#这个[n:acompany_with]中,:后面的就是类型。

生成结果如下:

把关系n添加了类型限制,类型是acompany_with,并发症。
再加个箭头,做个关系的方向限制。

match(m{name:'百日咳'})-[n:acompany_with]->(p) return m,n,p

结果为:

点击左边的table,可以查看查询出来的节点、关系的属性。

顺便详细说明一下build_medicalgraph.py中用到的一句Cypher语言:

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)
self.g.run(query)

结合前面说明的,可以看出来:

match(p:%s),(q:%s)   #查找节点p和q,类型分别是参数中的start_node, end_node
where p.name='%s'and q.name='%s'  #限制条件为,节点p的属性中,name=参数中的p。q意思相同。
create (p)-[rel:%s{name:'%s'}]->(q)  #建立关系rel,类型为参数中的rel_type,属性为name=参数中的rel_name

后面的参数中:
start_node是起始节点的类型,具体字段如Disease;
end_node是到达节点的类型,具体字段如Food;
p是起始节点的名称,具体字段如‘百日咳’;
q是到达节点的名称,具体字段如‘樱桃番茄’;
rel_type是关系的类型,具体字段如‘do_eat’;
rel_name是关系的名称,具体字段如‘宜吃’。

可查看此关系:

match(m:Disease{name:'百日咳'})-[n:do_eat{name:'宜吃'}]-(p:Food{name:'樱桃番茄'}) return m,n,p

**本节结束
菜哥学知识图谱(通过“基于医疗知识图谱的问答系统”)(六)(代码分析3) **

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: