当前位置:   article > 正文

Task 1 知识图谱介绍

Task 1 知识图谱介绍

Datawhale 知识图谱组队学习

1,知识图谱的概念:从学术的角度,知识图谱本质上是语义网络的知识库;从实际应用角度,知识图谱可以理解成多关系图。

2,知识图谱的构建:(1)数据来源:业务本身的数据;网络上公开、抓取的数据(需要NLP技术提取结构化信息)

                                  (2)信息抽取的难点:处理非结构化数据

                                  (3)涉及的技术有:命名实体识别、关系抽取、实体统一、指代消解

3,知识图谱的存储:基于RDF的存储(偏学术上);基于图数据库的存储(neo4j偏工业上)

4,Neo4J的安装使用:安装配置jdk及neo4j社区版,cmd进入neo4j安装路径bin目录下执行:neo4j.bat console,打开浏览器,输入http://127.0.0.1:7474/,界面最上方就是交互的输入框。

5,Neo4J实战:(同时按住shift + enter,命令换行)

      创建节点:CREATE (n:Person {name:'John'}) RETURN n

注:
CREATE是创建操作,Person是标签,代表节点的类型。
花括号{}代表节点的属性,属性类似Python的字典。
这条语句的含义就是创建一个标签为Person的节点,该节点具有一个name属性,属性值是John。

      创建更多的人物节点,并分别命名:(多行,以英文;隔开)

  1. CREATE (n:Person {name:'Sally'}) RETURN n;
  2. CREATE (n:Person {name:'Steve'}) RETURN n;
  3. CREATE (n:Person {name:'Mike'}) RETURN n;
  4. CREATE (n:Person {name:'Liz'}) RETURN n;
  5. CREATE (n:Person {name:'Shawn'}) RETURN n;

      创建地区节点:(节点类型为Location,属性包括city和state)

  1. CREATE (n:Location {city:'Miami', state:'FL'});
  2. CREATE (n:Location {city:'Boston', state:'MA'});
  3. CREATE (n:Location {city:'Lynn', state:'MA'});
  4. CREATE (n:Location {city:'Portland', state:'ME'});
  5. CREATE (n:Location {city:'San Francisco', state:'CA'});

      创建关系:

朋友关系

  1. MATCH (a:Person {name:'Liz'}),
  2. (b:Person {name:'Mike'})
  3. MERGE (a)-[:FRIENDS]->(b)

关系增加属性

  1. MATCH (a:Person {name:'Shawn'}),
  2. (b:Person {name:'Sally'})
  3. MERGE (a)-[:FRIENDS {since:2001}]->(b)

增加更多的朋友关系

  1. MATCH (a:Person {name:'Shawn'}), (b:Person {name:'John'}) MERGE (a)-[:FRIENDS {since:2012}]->(b)
  2. MATCH (a:Person {name:'Mike'}), (b:Person {name:'Shawn'}) MERGE (a)-[:FRIENDS {since:2006}]->(b)
  3. MATCH (a:Person {name:'Sally'}), (b:Person {name:'Steve'}) MERGE (a)-[:FRIENDS {since:2006}]->(b)
  4. MATCH (a:Person {name:'Liz'}), (b:Person {name:'John'}) MERGE (a)-[:MARRIED {since:1998}]->(b)

创建节点的时候就建好关系:

CREATE (a:Person {name:'Todd'})-[r:FRIENDS]->(b:Person {name:'Carlos'})

图数据库查询:

  1. 查询下所有在Boston出生的人物
     MATCH (a:Person)-[:BORN_IN]->(b:Location {city:'Boston'}) RETURN a,b
  2. 查询所有对外有关系的节点
     MATCH (a)--() RETURN a
  3. 查询所有有关系的节点
    MATCH (a)-[r]->() RETURN a.name, type(r)
  4. 查询所有对外有关系的节点,以及关系类型
    MATCH (a)-[r]->() RETURN a.name, type(r)

删除和修改:

  1. 增加/修改节点的属性(setk表示修改操作)
    1. MATCH (a:Person {name:'Liz'}) SET a.age=34
    2. MATCH (a:Person {name:'Shawn'}) SET a.age=32
    3. MATCH (a:Person {name:'John'}) SET a.age=44
    4. MATCH (a:Person {name:'Mike'}) SET a.age=25
  2. 删除节点的属性(remove)
    1. MATCH (a:Person {name:'Mike'}) SET a.test='test'
    2. MATCH (a:Person {name:'Mike'}) REMOVE a.test
  3. 删除节点(delete)
    MATCH (a:Location {city:'Portland'}) DELETE a
  4. 删除有关系的节点
    MATCH (a:Person {name:'Todd'})-[rel]-(b:Person) DELETE a,b,rel

6,通过Python操作Neo4j: neo4j模块;py2neo模块

neo4j_test.py
  1. #! -*- coding: utf-8 -*-
  2. #step 1:导入Neo4j驱动包 安装驱动pip install neo4j-driver
  3. from neo4j import GraphDatabase
  4. #setp 2:连接Neo4j图数据库
  5. driver = GraphDatabase.driver('neo4j://localhost:7687', auth=('neo4j', '123'))
  6. #添加关系函数
  7. def add_friend(tx, name, friend_name):
  8. tx.run('merge (a:Person {name:$name})'
  9. 'merge (a)-[:KNOWS]->(friend:Person {name: $friend_name})',
  10. name=name, friend_name=friend_name
  11. )
  12. #定义关系函数
  13. def print_friends(tx, name):
  14. for record in tx.run('match (a:Person)-[:KNOWS]->(friend) where a.name = $name return friend.name order by friend.name', name=name):
  15. print(record['friend.name'])
  16. #step 3:运行
  17. with driver.session() as session:
  18. session.write_transaction(add_friend, 'Arthur', 'Guinevere')
  19. session.write_transaction(add_friend, 'Arthur', 'Lancelot')
  20. session.write_transaction(add_friend, 'Arthur', 'Merlin')
  21. session.read_transaction(print_friends, 'Arthur')
py2neo_test.py
  1. #! -*- coding: utf-8 -*-
  2. #step1:导包
  3. from py2neo import Graph, Node, Relationship
  4. #step2:构件图
  5. g = Graph('http://localhost:7474/', auth=('neo4j', '123'))
  6. #step3:创建节点
  7. tx = g.begin()
  8. a = Node('Person', name='Alice')
  9. tx.create(a)
  10. b = Node('Person', name='Bob')
  11. #step4:创建边
  12. ab = Relationship(a, 'KNOWS', b)
  13. #step5:运行
  14. tx.create(ab)
  15. tx.commit()

 

7,通过csv文件批量导入图数据:

csv分为两个nodes.csv和relations.csv,注意关系里的起始节点必须是在nodes.csv里能找到。

制作出nodes.csv和relations.csv后,通过以下步骤导入neo4j:

  1. 两个文件nodes.csv ,relas.csv放在
    neo4j安装的绝对路径/import
  2. 导入到图数据库mygraph.db(neo4j bin/neo4j-admin import --nodes=/var/lib/neo4j/import/nodes.csv --relationships=/var/lib/neo4j/import/relas.csv --delimiter=^ --database=mygraph.db
    )其中,delimiter=^ 指的是csv的分隔符
  3. 指定neo4j使用哪个数据库
    修改 neo4j/conf/neo4j.conf 文件中的 dbms.default_database=mygraph.db
  4. 重启neo4j就可以看到数据已经导入成功了

Reference

干货 | 从零到一学习知识图谱的技术与应用

手把手教你快速入门知识图谱 - Neo4J教程

python操作图数据库neo4j的两种方式

Neo4j之导入数据

知识图谱Schema

美团大脑:知识图谱的建模方法及其应用 

知识图谱概念与技术 肖仰华

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号