知識圖譜本質上是語義網絡(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()