AI => 知识图谱之Neo4j-Cypher

CRUD

创建

普通无属性创建(默认给你创建一个ID)

create (p:person)-[:eat]->(f:food)

带有属性的创建( {} )

create (p:person{name:'zhangsan'})-[:eat]->(f:food{name:'apple'})

给两个孤独的实体创建关系:

match 
    (a:animal),(c:color) 
create    (如果这里改为 merge 则是 “有则查询,无则创建”)
    (a)-[h:have]->(c) return h

对应查询:
    match 
        (a:animal),(c:color) 
    return  a,c

删除 (delete)

match
    (a:animal)-[h:have]->(c:color) 
delete a,h,c

更新修改(set)

match
    (f:food) 
set f.age=20

查询

主体查询结构

match 
    (p:)-[:关系名]-[别名2:实体名] 
return 别名1,别名2

普通条件查询1(whree)

match 
    (n:User) 
where 
    n.name='Tom'
return n

普通条件查询2:( {} )

match 
    (p:person{name:'zhangsan'})-[:eat{level:1}]->(f:food{name:'apple'}) 
return p,f

正则条件查询(~)

match 
    (n:User) 
where 
    n.name=~'T.*'
return n

包含条件查询(contains)

match 
    (n:User) 
where 
    n.name contains 'T'
return n

多度查询

match (t:teacher)-[]-(s:student)-[]-(ss:score) return t,s,ss

# 注意1: [] 里面不写,代表所有关系
# 注意2: -  没有箭头,代表任意方向
# 注意3: 别名不可以重复指定, 所以我设置了 ss

多度关系: (通常是基于人脉来讲的)
1度关系:我 -> 你
2度关系:我 -> 你 -> 他

理解技巧: 算几度关系时,把自己(节点)捂住不看, 然后剩下几个人员节点,就是几度关系

特别注意:
    多度查关系时,比如你查 3度关系的结果。
    neo4j的图可能会把, 2度关系也画出来,why? 因为他通过2度关系也可直接得出结果。
    (可理解为 条条大路通罗马。)
    !!!但是最终有效的返回路径只是你最初想要的 3度。   (2度就不算了)

查询最短路径:

match (t:teacher), (s:student), 
    p=shortestpath( (t)-[*..]-(s) ) 
return p

# 注意: p= 之前有个逗号 ,

查询所有最短路径:

match (t:teacher), (s:student), 
    p=allshortestpaths( (t)-[*..]-(s) ) 
return p

# 注意1: 前面多个 all ,后面多个s
# 注意2: 所有最短路径的都会列出来。 人人平等~

索引

创建索引 (create)

create index on  :food(name)      

# food为实体名,name为属性名, 同时注意这个 :    

删除索引(drop)

drop index on  :food(name)

约束

创建约束

create constraint on (gf:girlfriend) assert (gf.name) is unique

删除约束

create constraint on (o:others) assert (o.name) is unique

聚合

统计个数(count)

match ... return count(别名)        

限制取多少条 (limit)

match ... return 别名 limit 5    # 只取5条

知识图谱流程

  1. 数据抓取
  2. 知识模型设计
  3. NER (远程监督)
  4. 关系抽取(Bootstrap)
  5. 知识推理
  6. 图谱存储(Neo4j Cypher)
  7. 检索/问答/推荐

实体抽取

BILSTM+CRF

关系抽取

Bootstrap方法:

1. 构建种子实体: "猫", "老鼠"。

2. 寻找包含 "猫"  "老鼠" 的 句子:
    找到句子:"猫和老鼠是好朋友"  
    可抽取关系: 和...是好朋友

3. 拿着抽取的关系再次寻找新句子:
    找到新句子:"张三和里李四是好朋友"
    提取出新实体: "张三", "李四"

4. 寻找包含 "张三"  "李四" 的 句子:
    找到句子:"张三经常和李四一起玩"  
    可抽取关系:  经常和... 一起玩

5. 拿着抽取的关系再次寻找新句子:
    找到新句子:"王五和赵六是好朋友"
    提取出新实体: "王五", "赵六"
...
...
循环反复

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。