知識圖譜和neo4j的基本操作

一.知識圖譜的簡介

1.知識圖譜是什麼

知識圖譜本質上是語義網絡(Semantic Network)的知識庫

  可以理解爲一個關係圖網絡。

2.什麼是圖

圖(Graph)是由節點(Vertex)和邊(Edge)來構成,多關係圖一般包含多種類型的節點和多種類型的邊。

3.什麼是Schema

限定待加入知識圖譜數據的格式;相當於某個領域內的數據模型,包含了該領域內有意義的概念類型以及這些類型的屬性

二.知識圖譜的構建

1.數據來源

結構化數據和非結構化數據,前者可能是本地數據庫中的信息,後者主要是在網頁上抓取的信息。

2.涉及的技術

命名實體識別,關係抽取等自然語言處理技術。

三.知識圖譜的存儲

  • 一種是基於RDF的存儲;
  • 另一種是基於圖數據庫的存儲。

  RDF一個重要的設計原則是數據的易發佈以及共享,圖數據庫則把重點放在了高效的圖查詢和搜索上。其次,RDF以三元組的方式來存儲數據而且不包含屬性信息,但圖數據庫一般以屬性圖爲基本的表示形式,所以實體和關係可以包含屬性,這就意味着更容易表達現實的業務場景。其中Neo4j系統目前仍是使用率最高的圖數據庫,它擁有活躍的社區,而且系統本身的查詢效率高,但唯一的不足就是不支持準分佈式。

 

 四.Neo4j的介紹

Neo4j爲常用的圖數據庫之一。

  Neo4j的安裝很簡單,先到官方網站Neo4j下載,下載完壓縮包之後直接解壓縮,然後配置好環境變量,可以按照這篇博客的方法https://www.cnblogs.com/jpfss/p/10874303.html。

  之後我們在瀏覽器內輸入http://127.0.0.1:7474/browser/就進入了Neo4j的界面。

 

 

 

 五.Neo4j的基本操作

 

//刪庫
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;

 

六.在python中操縱neo4j

1.neo4j模塊

  # 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")

 注意這裏的密碼要改成自己的,否則無法正常登陸。運行完上面的腳本後,就出現瞭如下的結點和邊:

 

 2.py2neo模塊

# 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()

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章