知識圖譜和neo4j的基本操做

一.知識圖譜的簡介

1.知識圖譜是什麼

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

  能夠理解爲一個關係圖網絡。python

2.什麼是圖

圖(Graph)是由節點(Vertex)和邊(Edge)來構成,多關係圖通常包含多種類型的節點和多種類型的邊。數據庫

3.什麼是Schema

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

二.知識圖譜的構建

1.數據來源

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

2.涉及的技術

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

三.知識圖譜的存儲

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

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

 

 四.Neo4j的介紹

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

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

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

 

 

 

 五.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()
相關文章
相關標籤/搜索