自然語言學習20-Neo4j構建知識圖譜

安裝

  • bin 目錄:用於存儲 Neo4j 的可執行程序;
  • conf 目錄:用於控制 Neo4j 啓動的配置文件;
  • data 目錄:用於存儲核心數據庫文件;
  • plugins 目錄:用於存儲 Neo4j 的插件。

cmd切換目錄至安裝路徑

安裝命令

bin\neo4j install-service

啓動服務、停止服務、重啓服務和查詢服務的狀態

bin\neo4j start
bin\neo4j stop
bin\neo4j restart
bin\neo4j status

Neo4j 的配置文檔存儲在 conf 目錄下,Neo4j 通過配置文件 neo4j.conf 控制服務器的工作。默認情況下,不需要進行任意配置,就可以啓動服務器。

Neo4j 服務器具有一個集成的瀏覽器,在一個運行的服務器實例上訪問: http://localhost:7474/,打開瀏覽器,顯示啓動頁面

默認的 Host 是 bolt://localhost:7687,默認的用戶是 neo4j,其默認的密碼是 neo4j,第一次成功登錄到 Neo4j 服務器之後,需要重置密碼。訪問 Graph Database 需要輸入身份驗證,Host 是 Bolt 協議標識的主機。

登錄界面

在 Neo4j 瀏覽器中創建節點和關係

使用 Cypher 命令,在瀏覽器中通過 Neo4j 創建兩個節點和兩個關係。

在 $ 命令行中,編寫 Cypher 腳本代碼,點擊 Play 按鈕完成創建

CREATE (n:Person { name: 'Andres', title: 'Developer' }) return n;

作用是創建一個 Person,幷包含屬性名字和職稱。

下面這條語句也創建了一個 Person 對象,屬性中只是名字和職稱不一樣。

CREATE (n:Person { name: 'Vic', title: 'Developer' }) return n;

通過下面兩行命令進行兩個 Person 的關係匹配

match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)-[r:Friend]->(m) return r;
match(n:Person{name:"Andres"}),(m:Person{name:"Vic"}) create (n)-[r:Friend]->(m) return r;

 

在創建完兩個節點和關係之後,查看數據庫中的圖形:

 

Py2neo 庫完成對 Neo4j 的操作

安裝 Py2neo

pip install py2neo

圖關係構建

from py2neo.data import Node, Relationship
a = Node("Person", name="Alice")
b = Node("Person", name="Bob")
ab = Relationship(a, "KNOWS", b)

首先引入 Node 和 Relationship 對象,緊接着,創建 a 和 b 節點對象,最後一行匹配 a 和 b 之間的工作僱傭關係

通過 print 打印出 ab 的內容

print(ab)

用 Neo4j 構建一個簡單的農業知識圖譜

基於 Neo4j 來創建知識圖譜的過程:

  • 環境準備
  • 語料準備
  • 語料加載
  • 知識圖譜查詢展示

語料是已經處理好的數據,包含6個 csv 文件,文件內容和描述如下。

  • attributes.csv:文件大小 2M,內容是通過互動百科頁面得到的部分實體的屬性,包含字段:Entity、AttributeName、Attribute,分別表示實體、屬性名稱、屬性值。文件前5行結構如下:
Entity,AttributeName,Attribute
密度板,別名,纖維板
葡萄蔓枯病,主要爲害部位,枝蔓
坎德拉,性別,男
坎德拉,國籍,法國
坎德拉,場上位置,後衛
  • hudong_pedia.csv:文件大小 94.6M,內容是已經爬好的農業實體的百科頁面的結構化數據,包含字段:title、url、image、openTypeList、detail、baseInfoKeyList、baseInfoValueList,分別表示名稱、百科 URL 地址、圖片、分類類型、詳情、關鍵字、依據來源。文件前2行結構如下:
"title","url","image","openTypeList","detail","baseInfoKeyList","baseInfoValueList"
"菊糖","http://www.baike.com/wiki/菊糖","http://a0.att.hudong.com/72/85/20200000013920144736851207227_s.jpg","健康科學##分子生物學##化學品##有機物##科學##自然科學##藥品##藥學名詞##藥物中文名稱列表","[藥理作用] 診斷試劑 人體內不含菊糖,靜注後,不被機體分解、結合、利用和破壞,經腎小球濾過,通過測定血中和尿中的菊糖含量,可以準確計算腎小球的濾過率。菊糖廣泛存在於植物組織中,約有3.6萬種植物中含有菊糖,尤其是菊芋、菊苣塊根中含有豐富的菊糖[6,8]。菊芋(Jerusalem artichoke)又名洋姜,多年生草本植物,在我國栽種廣泛,其適應性廣、耐貧瘠、產量高、易種植,一般畝產菊芋塊莖爲2 000~4 000 kg,菊芋塊莖除水分外,還含有15%~20%的菊糖,是加工生產菊糖及其製品的良好原料。","中文名:","菊糖"
"密度板","http://www.baike.com/wiki/密度板","http://a0.att.hudong.com/64/31/20200000013920144728317993941_s.jpg","居家##巧克力包裝##應用科學##建築材料##珠寶盒##禮品盒##科學##糖果盒##紅酒盒##裝修##裝飾材料##隔斷##首飾盒","密度板(英文:Medium Density Fiberboard (MDF))也稱纖維板,是以木質纖維或其他植物纖維爲原料,施加脲醛樹脂或其他適用的膠粘劑製成的人造板材。按其密度的不同,分爲高密度板、中密度板、低密度板。密度板由於質軟耐衝擊,也容易再加工,在國外是製作傢俬的一種良好材料,但由於國家關於高密度板的標準比國際標準低數倍,所以,密度板在中國的使用質量還有待提高。","中文名:##全稱:##別名:##主要材料:##分類:##優點:","密度板##中密度板纖維板##纖維板##以木質纖維或其他植物纖維##高密度板、中密度板、低密度板##表面光滑平整、材質細密性能穩定"
  • hudong_pedia2.csv:文件大小 41M,內容結構和 hudong_pedia.csv 文件保持一致,只是增加數據量,作爲 hudong_pedia.csv 數據的補充。

  • new_node.csv:文件大小 2.28M,內容是節點名稱和標籤,包含字段:title、lable,分別表示節點名稱、標籤,文件前5行結構如下:

title,lable
藥物治療,newNode
膳食纖維,newNode
Boven Merwede,newNode
亞美尼亞蘇維埃百科全書,newNode
  • wikidata_relation.csv:文件大小 1.83M,內容是實體和關係,包含字段 HudongItem1、relation、HudongItem2,分別表示實體1、關係、實體2,文件前5行結構如下:
HudongItem1,relation,HudongItem2
菊糖,instance of,化合物
菊糖,instance of,多糖
瓦爾,instance of,河流
菊糖,subclass of,食物
瓦爾,origin of the watercourse,萊茵河
  • wikidata_relation2.csv:大小 7.18M,內容結構和 wikidata_relation.csv 一致,作爲 wikidata_relation.csv 數據的補充。

語料加載

將csv文件放入 D:\neo4j-community-3.5.12\import 路徑下

利用 Neo4j 的 LOAD CSV WITH HEADERS FROM... 功能進行加載

// 將hudong_pedia.csv 導入
LOAD CSV WITH HEADERS  FROM "file:///hudong_pedia.csv" AS line  
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})

將 hudong_pedia.csv 和 hudong_pedia2.csv 導入 Neo4j 作爲結點,然後對 titile 屬性添加 UNIQUE(唯一約束/索引)。

// 新增了hudong_pedia2.csv
LOAD CSV WITH HEADERS  FROM "file:///hudong_pedia2.csv" AS line  
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})

// 創建索引
CREATE CONSTRAINT ON (c:HudongItem)
ASSERT c.title IS UNIQUE

 

error

Neo.ClientError.Statement.SyntaxError: Invalid input 'N': expected 'p/P' (line 6, column 20 (offset: 316))
"ASSERT c.title IS UNIQUE"

Neo.ClientError.Statement.SyntaxError: Invalid input 'N': expected 'p/P' (line 6, column 20 (offset: 316)) "ASSERT c.title IS UNIQUE" ^

 

 

 

 

z

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章