[知識圖譜構建] 一.Neo4j圖資料庫安裝初識及藥材供應圖譜例項
2012年5月,谷歌公司的知識圖譜(Knowledge Graph)產品被正式提出,其旨在將人、地點、物等資訊作為實體,將實體間的聯絡作為關係,並將實體和關係以圖的形式進行儲存。作為語義網的最新產物,知識圖譜這種新型的搜尋引擎改變了傳統的文字搜尋結果,而隨後國內公司也開發出了相應產品,例如百度公司的“知心”和搜狗公司的“知立方”等。知識圖譜本質上屬於一種語義網。知識圖譜中的每一條資料或事實一般會採用 <實體,屬性,屬性值> <實體, 關係, 實體> 的三元組形式來描述。基於知識圖譜,開發人員可以開發語義相關應用,例如語義搜尋、問答系統、實體推薦等應用。
這系列文章將詳細講解知識圖譜的一些應用及例項,前部分主要介紹Neo4j圖資料庫的基本用法,結合語句講解一個藥材供應鏈的案例,匯入CSV資料實現圖譜。
PSS:2019年1~2月作者參加了CSDN2018年部落格評選,希望您能投出寶貴的一票。我是59號,Eastmount,楊秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index
一.Neo4j安裝
從官方網站下載Neo4j對應的版本,包括網頁版、桌面版。作者下載的是 neo4j-desktop-offline-1.1.10-setup.exe。
官方地址: https://neo4j.com/download/
CSDN地址:https://download.csdn.net/download/eastmount/10737631
1.雙擊Neo4j桌面版軟體,點選安裝。
2.選擇安裝位置,點選下一步成功安裝。
3.執行軟體並初始化,如下圖所示。
4.成功執行後的軟體如下圖所示。
二.藥材供應鏈圖譜實現
(一)匯入資料建立實體
1.點選“Project”=>“Add Graph”增加新的圖形。
2.在彈出的新介面中點選“Create a Local Graph”按鈕,建立一個本地的圖形。
3.輸入建立圖形的名字及密碼,如“Graph1022”、“123456”,點選建立。
4.在“Graph1022”中點選“Start”按鈕開啟圖資料庫伺服器。
5.點選“Manage”管理頁面,接著點選“Open Browser”開啟瀏覽器。
彈出如下所示介面,該介面中可以輸入CQL語句編輯圖資料庫。
(二) 匯入資料建立關係
1.假設該藥材的供應鏈如下圖所示,現在需要建立對應的簡單圖譜。
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(企業)。
資料夾位置為:C:/Users/yxz/.Neo4jDesktop/neo4jDatabases/database-4e2113ef-fa69-444a-9470-14af5e553e63/installation-3.4.1/import/entity-01.csv
4.插入實體成功之後,執行下面語句顯示所插入的實體。
match(n) return n
點選執行之後可以看到插入的12個企業實體。
同時可以編輯節點的顏色、大小,顯示指定的雙屬性,如下所示。
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(藥材)。
顯示結果如下所示,不同種類的實體顯示不同的顏色。
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”程式碼檢視結果如下圖所示,可以看到企業之間交易關係。
(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”程式碼檢視結果如下圖所示,可以看到企業藥材之間關係。
(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)
執行結果如下圖所示:
7.可以編輯節點、關係顯示的內容及顏色大小屬性。
8.獲取實體關係的頂層概念關係。
call db.schema
顯示結果如下圖所示:
注意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。
完整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/ )
相關文章
- 構建知識圖譜-初學
- 【知識圖譜】 一個有效的知識圖譜是如何構建的?
- 【知識圖譜】知識圖譜資料構建的“硬骨頭”,阿里工程師如何拿下?深度學習在知識圖譜構建中的應用。阿里工程師深度學習
- 知識圖譜構建與應用
- 知識圖譜|知識圖譜的典型應用
- 為知識的海洋繪製地圖 —— 利用CirroData-Graph圖資料庫構建知識圖譜地圖資料庫
- 安全知識圖譜|構建APT組織圖譜,打破資訊孤島效應APT
- 知識圖譜Knowledge Graph構建與應用
- 知識圖譜01:知識圖譜的定義
- 安全知識圖譜 | 繪製軟體供應鏈知識圖譜,強化風險分析
- 知識圖譜學習記錄--知識圖譜概述
- 大資料架構師知識圖譜大資料架構
- 人力資源知識圖譜搭建及應用
- 使用ChatGPT自動構建知識圖譜ChatGPT
- Redis閒談(1):構建知識圖譜Redis
- 事理圖譜,下一代知識圖譜
- OI知識圖譜
- go 知識圖譜Go
- [知識圖譜構建] 二.《Neo4j基礎入門》基礎學習之建立圖資料庫節點及關係資料庫
- 知識圖譜之知識表示
- 構建知識圖譜的八個好處
- 知識圖譜技術的新成果—KGB知識圖譜介紹
- 知識圖譜構建與應用推薦學習分享
- NLPIR系統構建知識圖譜助力智慧客服應用
- 知識圖譜學習
- Http/2知識圖譜HTTP
- KGB知識圖譜,利用科技解決傳統知識圖譜問題
- 知識圖譜構建之實體關係挖掘
- 【科普】知識圖譜 Neoj4圖形資料庫 Cypher語言資料庫R語言
- 手把手 | 事理圖譜,下一代知識圖譜
- 如何畫好一張架構圖?(內含知識圖譜)架構
- 知識圖譜丨知識圖譜賦能企業數字化轉型
- 【知識圖譜】知識圖譜實體連結無監督學習框架框架
- 知識圖譜的器與用(一):百萬級知識圖譜實時視覺化引擎視覺化
- NumPy基礎知識圖譜
- 01 知識圖譜概論
- 知識圖譜入門2
- 華為雲專家講述知識圖譜構建流程及方法