[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

Eastmount發表於2018-10-22

2012年5月,谷歌公司的知識圖譜(Knowledge Graph)產品被正式提出,其旨在將人、地點、物等資訊作為實體,將實體間的聯絡作為關係,並將實體和關係以圖的形式進行儲存。作為語義網的最新產物,知識圖譜這種新型的搜尋引擎改變了傳統的文字搜尋結果,而隨後國內公司也開發出了相應產品,例如百度公司的“知心”和搜狗公司的“知立方”等。知識圖譜本質上屬於一種語義網。知識圖譜中的每一條資料或事實一般會採用 <實體,屬性,屬性值> <實體, 關係, 實體> 的三元組形式來描述。基於知識圖譜,開發人員可以開發語義相關應用,例如語義搜尋、問答系統、實體推薦等應用。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

這系列文章將詳細講解知識圖譜的一些應用及例項,前部分主要介紹Neo4j圖資料庫的基本用法,結合語句講解一個藥材供應鏈的案例,匯入CSV資料實現圖譜。

PSS:2019年1~2月作者參加了CSDN2018年部落格評選,希望您能投出寶貴的一票。我是59號,Eastmount,楊秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項
五年來寫了314篇部落格,12個專欄,是真的熱愛分享,熱愛CSDN這個平臺,也想幫助更多的人,專欄包括Python、資料探勘、網路爬蟲、影象處理、C#、Android等。現在也當了兩年老師,更是覺得有義務教好每一個學生,讓貴州學子好好寫點程式碼,學點技術,"師者,傳到授業解惑也",提前祝大家新年快樂。2019我們攜手共進,為愛而生。

一.Neo4j安裝

從官方網站下載Neo4j對應的版本,包括網頁版、桌面版。作者下載的是 neo4j-desktop-offline-1.1.10-setup.exe。
官方地址: https://neo4j.com/download/
CSDN地址:https://download.csdn.net/download/eastmount/10737631

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

1.雙擊Neo4j桌面版軟體,點選安裝。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

2.選擇安裝位置,點選下一步成功安裝。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

3.執行軟體並初始化,如下圖所示。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

4.成功執行後的軟體如下圖所示。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

二.藥材供應鏈圖譜實現

(一)匯入資料建立實體

1.點選“Project”=>“Add Graph”增加新的圖形。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

2.在彈出的新介面中點選“Create a Local Graph”按鈕,建立一個本地的圖形。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

3.輸入建立圖形的名字及密碼,如“Graph1022”、“123456”,點選建立。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

4.在“Graph1022”中點選“Start”按鈕開啟圖資料庫伺服器。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

5.點選“Manage”管理頁面,接著點選“Open Browser”開啟瀏覽器。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項
[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

彈出如下所示介面,該介面中可以輸入CQL語句編輯圖資料庫。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

(二) 匯入資料建立關係
1.假設該藥材的供應鏈如下圖所示,現在需要建立對應的簡單圖譜。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

2.需要匯入的實體資料主要有兩類,企業類、藥材類。如下所示:
(1) 企業 entity-01.csv

id	name	label
1	威門藥業	企業
2	東莞焱興實業	企業
3	銀川塞外杞香	企業
4	安徽亳州藥業	企業
5	撫松泓宇特產	企業
6	格爾木源鑫堂	企業
7	亳州一陽藥業	企業
8	成都德音電商	企業
9	康美中藥材	企業
10	亳州昌盛鑫蔘茸	企業
11	鄭州偉豐生物	企業
12	山東大凱生物	企業

(2) 藥材 entity-02.csv

id	name	label
13	北沙蔘	藥材
14	枸杞子	藥材
15	麥冬	藥材
16	川楝子	藥材
17	當歸	藥材
18	地黃	藥材
19	桂枝	藥材
20	人蔘	藥材
21	黨蔘	藥材
22	白芷	藥材
23	羌活	藥材
24	細辛	藥材
25	防風	藥材
26	荊芥	藥材
27	薄荷	藥材
28	甘草	藥材
29	乳糖	藥材
30	糊精	藥材

3.接著將需要匯入的csv檔案放置在該資料庫的import資料夾下,然後執行如下語句。

LOAD CSV WITH HEADERS  FROM "file:///entity-01.csv" AS line
MERGE (p:Enterprise{id:line.id,name:line.name})

程式碼功能:載入CSV檔案從import資料夾中,AS line表示按行讀取檔案內容,包括兩個值:id 和 name,抽象的實體概念名字為Enterprise(企業)。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

資料夾位置為:C:/Users/yxz/.Neo4jDesktop/neo4jDatabases/database-4e2113ef-fa69-444a-9470-14af5e553e63/installation-3.4.1/import/entity-01.csv

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

4.插入實體成功之後,執行下面語句顯示所插入的實體。

match(n) return n

點選執行之後可以看到插入的12個企業實體。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

同時可以編輯節點的顏色、大小,顯示指定的雙屬性,如下所示。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

5.執行如下語句插入30個藥材實體。

LOAD CSV WITH HEADERS  FROM "file:///entity-02.csv" AS line
MERGE (p:Medicinal{id:line.id,name:line.name})

程式碼功能:載入CSV檔案從import資料夾中,AS line表示按行讀取檔案內容,包括兩個值:id 和 name,抽象的實體概念名字為Medicinal(藥材)。

顯示結果如下所示,不同種類的實體顯示不同的顏色。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

6.接著插入關係,包括三種:
(1) rela-11.csv:企業與企業的關係,企業買賣交易。

from_id	pro1	pro2	pro3	pro4	pro5	pro6	pro7	to_id
1	交易	北沙蔘	威門藥業股份有限公司	東莞市焱興實業發展有限公司	936	10	9360	2
1	交易	枸杞子	威門藥業股份有限公司	銀川塞外杞香科貿有限公司	159	6	954	3
1	交易	麥冬	威門藥業股份有限公司	安徽亳州藥業集團	938	9	8442	4
1	交易	川楝子	威門藥業股份有限公司	安徽亳州藥業集團	767	4	3068	4
1	交易	當歸	威門藥業股份有限公司	安徽亳州藥業集團	585	2	1170	4
1	交易	地黃	威門藥業股份有限公司	安徽亳州藥業集團	575	2	1150	4
1	交易	桂枝	威門藥業股份有限公司	安徽亳州藥業集團	787	7	5509	4
1	交易	人蔘	威門藥業股份有限公司	撫松縣泓宇特產有限公司	488	7	3416	5
1	交易	黨蔘	威門藥業股份有限公司	格爾木源鑫堂生物科技有限公司	861	1	861	6
1	交易	白芷	威門藥業股份有限公司	亳州市一陽藥業銷售有限公司	282	3	846	7
1	交易	羌活	威門藥業股份有限公司	亳州市一陽藥業銷售有限公司	853	1	853	7
1	交易	細辛	威門藥業股份有限公司	亳州市一陽藥業銷售有限公司	560	3	1680	7
1	交易	防風	威門藥業股份有限公司	成都德音電子商務有限公司	626	3	1878	8
1	交易	荊芥	威門藥業股份有限公司	成都德音電子商務有限公司	62	3	186	8
1	交易	薄荷	威門藥業股份有限公司	棗莊市臺兒莊區康美中藥材種植專業合作社	445	1	445	9
1	交易	甘草	威門藥業股份有限公司	亳州市昌盛鑫蔘茸有限責任公司	426	5	2130	10
1	交易	乳糖	威門藥業股份有限公司	鄭州市偉豐生物科技有限公司	484	1	484	11
1	交易	糊精	威門藥業股份有限公司	山東大凱生物科技有限公司	249	2	498	12

CQL程式碼如下,需要注意 from_id(關係起始) 和 to_id(關係介紹),包含的屬性需要和CSV表格一致。

LOAD CSV WITH HEADERS FROM "file:///rela-11.csv" AS line
match (from:Enterprise{id:line.from_id}),(to:Enterprise{id:line.to_id})
merge (from)-[r:rel{pro1:line.pro1,pro2:line.pro2,pro3:line.pro3,pro4:line.pro4,pro5:line.pro5,pro6:line.pro6,pro7:line.pro7}]->(to)

執行“match(n) return n”程式碼檢視結果如下圖所示,可以看到企業之間交易關係。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

(2) rela-12.csv:企業與藥品的關係,威門藥業購入藥品。

from_id	pro1	pro2	pro3	pro4	to_id
1	買入	藥品	威門藥業股份有限公司	東莞市焱興實業發展有限公司	13
1	買入	藥品	威門藥業股份有限公司	銀川塞外杞香科貿有限公司	14
1	買入	藥品	威門藥業股份有限公司	安徽亳州藥業集團	15
1	買入	藥品	威門藥業股份有限公司	安徽亳州藥業集團	16
1	買入	藥品	威門藥業股份有限公司	安徽亳州藥業集團	17
1	買入	藥品	威門藥業股份有限公司	安徽亳州藥業集團	18
1	買入	藥品	威門藥業股份有限公司	安徽亳州藥業集團	19
1	買入	藥品	威門藥業股份有限公司	撫松縣泓宇特產有限公司	20
1	買入	藥品	威門藥業股份有限公司	格爾木源鑫堂生物科技有限公司	21
1	買入	藥品	威門藥業股份有限公司	亳州市一陽藥業銷售有限公司	22
1	買入	藥品	威門藥業股份有限公司	亳州市一陽藥業銷售有限公司	23
1	買入	藥品	威門藥業股份有限公司	亳州市一陽藥業銷售有限公司	24
1	買入	藥品	威門藥業股份有限公司	成都德音電子商務有限公司	25
1	買入	藥品	威門藥業股份有限公司	成都德音電子商務有限公司	26
1	買入	藥品	威門藥業股份有限公司	棗莊市臺兒莊區康美中藥材種植專業合作社	27
1	買入	藥品	威門藥業股份有限公司	亳州市昌盛鑫蔘茸有限責任公司	28
1	買入	藥品	威門藥業股份有限公司	鄭州市偉豐生物科技有限公司	29
1	買入	藥品	威門藥業股份有限公司	山東大凱生物科技有限公司	30

CQL程式碼如下:

LOAD CSV WITH HEADERS FROM "file:///rela-12.csv" AS line
match (from:Enterprise{id:line.from_id}),(to:Medicinal{id:line.to_id})
merge (from)-[r:rel{pro1:line.pro1,pro2:line.pro2,pro3:line.pro3,pro4:line.pro4}]->(to)

執行“match(n) return n”程式碼檢視結果如下圖所示,可以看到企業藥材之間關係。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

(3) rela-21.csv:企業與藥品的關係,from_id企業賣出to_id藥品。

from_id	pro1	pro2	to_id
2	藥品	賣出	13
3	藥品	賣出	14
4	藥品	賣出	15
4	藥品	賣出	16
4	藥品	賣出	17
4	藥品	賣出	18
4	藥品	賣出	19
5	藥品	賣出	20
6	藥品	賣出	21
7	藥品	賣出	22
7	藥品	賣出	23
7	藥品	賣出	24
8	藥品	賣出	25
8	藥品	賣出	26
9	藥品	賣出	27
10	藥品	賣出	28
11	藥品	賣出	29
12	藥品	賣出	30

CQL程式碼如下:

LOAD CSV WITH HEADERS FROM "file:///rela-21.csv" AS line
match (from:Enterprise{id:line.from_id}),(to:Medicinal{id:line.to_id})
merge (from)-[r:賣出{pro1:line.pro1,pro2:line.pro2}]->(to)

執行結果如下圖所示:

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

7.可以編輯節點、關係顯示的內容及顏色大小屬性。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

8.獲取實體關係的頂層概念關係。

call db.schema

顯示結果如下圖所示:

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

注意1:如果在匯入資料過程中出現錯誤,需要刪除關係、節點,則使用下面程式碼。

刪除節點及關係
MATCH (n)-[r]-()
DELETE n,r
match(n) return n

刪除關係
MATCH (n)-[r]-()
DELETE r

單純刪除所以節點:
match (n)
delete n

注意2:為了防止出現中文亂碼,建議採用記事本開啟CSV檔案,將檔案編碼方式從ASC-II修改為UTF-8。

[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項

完整CQL程式碼如下:

載入實體
LOAD CSV WITH HEADERS  FROM "file:///entity-01.csv" AS line
MERGE (p:Enterprise{id:line.id,name:line.name})
LOAD CSV WITH HEADERS  FROM "file:///entity-02.csv" AS line
MERGE (p:Medicinal{id:line.id,name:line.name})

顯示節點
match(n) return n
match(n) return n limit 9

刪除節點及關係
MATCH (n)-[r]-()
DELETE n,r
match(n) return n

刪除關係
MATCH (n)-[r]-()
DELETE r

單純刪除所以節點:
match (n)
delete n

查詢指定節點
match (tom {id: "1"}) return tom

載入關係1
LOAD CSV WITH HEADERS FROM "file:///rela-11.csv" AS line
match (from:Enterprise{id:line.from_id}),(to:Enterprise{id:line.to_id})
merge (from)-[r:rel{pro1:line.pro1,pro2:line.pro2,pro3:line.pro3,pro4:line.pro4,pro5:line.pro5,pro6:line.pro6,pro7:line.pro7}]->(to)

match(n) return n

載入關係2
LOAD CSV WITH HEADERS FROM "file:///rela-12.csv" AS line
match (from:Enterprise{id:line.from_id}),(to:Medicinal{id:line.to_id})
merge (from)-[r:rel{pro1:line.pro1,pro2:line.pro2,pro3:line.pro3,pro4:line.pro4}]->(to)

match(n) return n

載入關係3
LOAD CSV WITH HEADERS FROM "file:///rela-21.csv" AS line
match (from:Enterprise{id:line.from_id}),(to:Medicinal{id:line.to_id})
merge (from)-[r:賣出{pro1:line.pro1,pro2:line.pro2}]->(to)

MATCH p=()-[r:`賣出`]->() RETURN p LIMIT 25
match(n) return n

顯示頂層概念
call db.schema

最後希望文章對您有所幫助,如果有錯誤的地方還請海涵。推薦我的知識圖譜基礎文章。
中文知識圖譜研討會的學習總結 (上) 圖譜引入、百度知心、搜狗知立方
搜尋引擎和知識圖譜那些事 (上).基礎篇
知識圖譜相關會議之觀後感分享與學習總結
知識圖譜基礎(二)-知識圖譜的知識表達系統
(By: Eastmount 2018-10-22 晚10點 https://blog.csdn.net/Eastmount/ )

相關文章