知识图谱本质上是语义网络(Semantic Network)的知识库html
能够理解为一个关系图网络。python
图(Graph)是由节点(Vertex)和边(Edge)来构成,多关系图通常包含多种类型的节点和多种类型的边。数据库
限定待加入知识图谱数据的格式;至关于某个领域内的数据模型,包含了该领域内有意义的概念类型以及这些类型的属性
浏览器
结构化数据和非结构化数据,前者多是本地数据库中的信息,后者主要是在网页上抓取的信息。网络
命名实体识别,关系抽取等天然语言处理技术。session
- 一种是基于RDF的存储;
- 另外一种是基于图数据库的存储。
RDF一个重要的设计原则是数据的易发布以及共享,图数据库则把重点放在了高效的图查询和搜索上。其次,RDF以三元组的方式来存储数据并且不包含属性信息,但图数据库通常以属性图为基本的表示形式,因此实体和关系能够包含属性,这就意味着更容易表达现实的业务场景。其中Neo4j系统目前还是使用率最高的图数据库,它拥有活跃的社区,并且系统自己的查询效率高,但惟一的不足就是不支持准分布式。分布式
Neo4j为经常使用的图数据库之一。函数
Neo4j的安装很简单,先到官方网站Neo4j下载,下载完压缩包以后直接解压缩,而后配置好环境变量,能够按照这篇博客的方法https://www.cnblogs.com/jpfss/p/10874303.html。网站
以后咱们在浏览器内输入http://127.0.0.1:7474/browser/就进入了Neo4j的界面。ui
//删库 MATCH (n) DETACH DELETE n //建立人物结点 CREATE (n:Person {name:'John'}) RETURN n //建立地区结点 CREATE (n:Location {city:'Miami', state:'FL'}) //建立朋友关系 MATCH (a:Person {name:'Liz'}), (b:Person {name:'Mike'}) MERGE (a)-[:FRIENDS]->(b) //建立出生地关系 MATCH (a:Person {name:'John'}), (b:Location {city:'Boston'}) MERGE (a)-[:BORN_IN {year:1978}]->(b); MATCH (a:Person {name:'Liz'}), (b:Location {city:'Boston'}) MERGE (a)-[:BORN_IN {year:1981}]->(b); //按照出生地查询 MATCH (a:Person)-[:BORN_IN]->(b:Location {city:'Boston'}) RETURN a,b //查询全部对外有关系的结点和类型 MATCH (a)-[r]->() RETURN a.name, type(r) //查询全部婚姻关系的结点 MATCH (n)-[:MARRIED]-() RETURN n //查找某人朋友的朋友 MATCH (a:Person {name:'Mike'})-[r1:FRIENDS]-()-[r2:FRIENDS]-(friend_of_a_friend) RETURN friend_of_a_friend.name AS fofName //增长或者修改结点属性 MATCH (a:Person {name:'Liz'}) SET a.age=34 //删除结点属性 MATCH (a:Person {name:'Mike'}) SET a.test='test'; MATCH (a:Person {name:'Mike'}) REMOVE a.test;
# step 1:导入 Neo4j 驱动包 from neo4j import GraphDatabase # step 2:链接 Neo4j 图数据库 driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password")) # 添加 关系 函数 def add_friend(tx, name, friend_name): tx.run("MERGE (a:Person {name: $name}) " "MERGE (a)-[:KNOWS]->(friend:Person {name: $friend_name})", name=name, friend_name=friend_name) # 定义 关系函数 def print_friends(tx, name): for record in tx.run("MATCH (a:Person)-[:KNOWS]->(friend) WHERE a.name = $name " "RETURN friend.name ORDER BY friend.name", name=name): print(record["friend.name"]) # step 3:运行 with driver.session() as session: session.write_transaction(add_friend, "Arthur", "Guinevere") session.write_transaction(add_friend, "Arthur", "Lancelot") session.write_transaction(add_friend, "Arthur", "Merlin") session.read_transaction(print_friends, "Arthur")
注意这里的密码要改为本身的,不然没法正常登录。运行完上面的脚本后,就出现了以下的结点和边:
# step 1:导包 from py2neo import Graph, Node, Relationship # step 2:构建图 g = Graph("http://localhost:7474",auth=("neo4j","password")) # step 3:建立节点 tx = g.begin() a = Node("Person", name="Alice") tx.create(a) b = Node("Person", name="Bob") # step 4:建立边 ab = Relationship(a, "KNOWS", b) # step 5:运行 tx.create(ab) tx.commit()