KG知識圖譜 學習 Part3 - 知識圖譜存儲

??主要是知識的存儲和數(shù)據(jù)庫的選型
??其實這部分的內容我在學習的時候覺得挺枯燥的,其實主要用到的是Neo4j圖數(shù)據(jù)庫,也就是第3部分往后的內容,其他的感覺不是很重要


綜述


1.知識存儲模型

1.知識存儲模型

  • 關系型數(shù)據(jù)庫——適用于體量比較小的知識圖譜的存儲
  • 三元組——因語義網(wǎng)而產生的,適用于體量比較小的,網(wǎng)頁的
  • 圖數(shù)據(jù)庫——體量比較大的知識圖譜的存儲

2.存儲模型選擇原則一

??注:如果一個對象本身,沒有研究它與其他對象之間的關系,那就沒有必要進行圖譜存儲; 統(tǒng)計類的,常規(guī)需要去計算的內容沒有必要存儲在圖譜中,也就是不需要基于知識存儲的模型來進行存儲;

3.1.關系型數(shù)據(jù)庫:三元組表

??S為對象,P為屬性,O為取值

讀取對象多個屬性的時候,會有大量的自連接操作

3.2.關系型數(shù)據(jù)庫:屬性表

??屬性表的優(yōu)點:RDF的靈活性;缺點:要查詢一個人(屬性未定時),需要遍歷所有的表

3.3.關系型數(shù)據(jù)庫:垂直分割

??垂直分割的缺點:一個屬性就需要一個數(shù)據(jù)表;刪除一個對象需要遍歷所有的表

??以上三種傳統(tǒng)型數(shù)據(jù)庫存儲知識圖譜,小數(shù)量的情況下沒有問題,但是數(shù)據(jù)量規(guī)模大就不適用了

4.RDF三元組

RDF三元組是基于XML進行描述的

5.圖數(shù)據(jù)庫



2.圖數(shù)據(jù)庫選型

1.RDF數(shù)據(jù)庫排行

https://db-engines.com/en/ranking/rdf+store

??MarkLogic商用,Jena是基于Java的開源框架

2.Jena:開源Java框架,本體處理工具

??通常使用Protege和Jena相結合來處理本體對象;基于本體對象構建知識圖譜時,使用Protege進行本體對象的設計,用Jena進行開發(fā)

3.Neo4j:嵌入式、基于磁盤、可視化的圖數(shù)據(jù)庫

4.Titan:分布式圖形數(shù)據(jù)庫

工業(yè)級的應用或者大量級數(shù)據(jù)的應用一般使用Titan

3.Neo4j開發(fā)環(huán)境

官網(wǎng)下載客戶端,本地啟動服務即可

Hello World

收藏中有Hello World示例

??database和message為兩個節(jié)點,r為關系

  • Graph

  • Table

  • Text

  • Code



4.Neo4j-CQL語法基礎

1.概念


實例

??同一個類型的節(jié)點的屬性可以是不一樣的

2.關鍵字詞匯表

3.DDL-創(chuàng)建節(jié)點

4.DDL-創(chuàng)建關系



5.語法實踐

1.調出CQL語法

:play cypher

2.創(chuàng)建

// 創(chuàng)建一個人的節(jié)點,對他的屬性賦值
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })

??最后加RETURN和不加會有顯示的區(qū)別

3.查詢

// 查詢名字叫Emil的人
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;

如果想創(chuàng)建唯一的節(jié)點對象

// Create unique property constraint
// Replace:
// 'LabelName' with node label
// 'propertyKey' with property that should be unique
CREATE CONSTRAINT ON (n:<LabelName>) ASSERT n.<propertyKey> IS UNIQUE

4.創(chuàng)建多個節(jié)點

MATCH (ee:Person) WHERE ee.name = "Emil"
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)


6.案例操作

1.內置案例movie graph

2.開始示例

  • Movie Graph 如何系統(tǒng)性地創(chuàng)建圖譜的
  • Northwind Graph 如何從其他形式的內容轉換過來的

3.創(chuàng)建各個節(jié)點和關系

// 創(chuàng)建節(jié)點
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
// 創(chuàng)建關系
CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix)

4.1.查詢

??查詢所得對象的屬性在下面顯示

4.2.查詢



7.系統(tǒng)監(jiān)控(暫時沒有用到)


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容