DataWhale組隊(duì)學(xué)習(xí)之知識(shí)圖譜-task01

參考datawhale開源組織:https://github.com/datawhalechina/team-learning-nlp/blob/master/KnowledgeGraph_Basic/task01.md

一、知識(shí)圖譜簡(jiǎn)介

后期會(huì)一直更新遇到的坑,關(guān)于mac的會(huì)在后期更入

1.1 引言

從一開始的Google搜索,到現(xiàn)在的聊天機(jī)器人、大數(shù)據(jù)風(fēng)控、證券投資、智能醫(yī)療、自適應(yīng)教育、推薦系統(tǒng),無一不跟知識(shí)圖譜相關(guān)。它在技術(shù)領(lǐng)域的熱度也在逐年上升。

早在 2010 年微軟就開始構(gòu)建知識(shí)圖譜,包括 Satori 和 Probase;2012 年,Google 正式發(fā)布了 Google Knowledge Graph,現(xiàn)在規(guī)模已超 700 億。目前微軟和 Google 擁有全世界最大的通用知識(shí)圖譜,F(xiàn)acebook 擁有全世界最大的社交知識(shí)圖譜,而阿里巴巴和亞馬遜則分別構(gòu)建了商品知識(shí)圖譜。


image.png

image.png

本章以通俗易懂的方式來講解知識(shí)圖譜相關(guān)的知識(shí)、介紹從零開始搭建知識(shí)圖譜過程當(dāng)中需要經(jīng)歷的步驟以及每個(gè)階段。本次組隊(duì)學(xué)習(xí)還將動(dòng)手實(shí)踐一個(gè)關(guān)于kg在智能問答中的應(yīng)用。

1.2 什么是知識(shí)圖譜呢?

知識(shí)圖譜是由 Google 公司在 2012 年提出來的一個(gè)新的概念。從學(xué)術(shù)的角度,我們可以對(duì)知識(shí)圖譜給一個(gè)這樣的定義:“知識(shí)圖譜本質(zhì)上是語義網(wǎng)絡(luò)(Semantic Network)的知識(shí)庫”。但這有點(diǎn)抽象,所以換個(gè)角度,從實(shí)際應(yīng)用的角度出發(fā)其實(shí)可以簡(jiǎn)單地把知識(shí)圖譜理解成多關(guān)系圖(Multi-relational Graph)。

1.2.1 什么是圖(Graph)呢?

圖(Graph)是由節(jié)點(diǎn)(Vertex)和邊(Edge)來構(gòu)成,多關(guān)系圖一般包含多種類型的節(jié)點(diǎn)和多種類型的邊。實(shí)體(節(jié)點(diǎn))指的是現(xiàn)實(shí)世界中的事物比如人、地名、概念、藥物、公司等,關(guān)系(邊)則用來表達(dá)不同實(shí)體之間的某種聯(lián)系,比如人-“居住在”-北京、張三和李四是“朋友”、邏輯回歸是深度學(xué)習(xí)的“先導(dǎo)知識(shí)”等等。


image.png

1.2.2 什么是 Schema 呢?

知識(shí)圖譜另外一個(gè)很重要的概念是 Schema:
介紹:限定待加入知識(shí)圖譜數(shù)據(jù)的格式;相當(dāng)于某個(gè)領(lǐng)域內(nèi)的數(shù)據(jù)模型,包含了該領(lǐng)域內(nèi)有意義的概念類型以及這些類型的屬性
作用:規(guī)范結(jié)構(gòu)化數(shù)據(jù)的表達(dá),一條數(shù)據(jù)必須滿足Schema預(yù)先定義好的實(shí)體對(duì)象及其類型,才被允許更新到知識(shí)圖譜中, 一圖勝千言
圖中的DataType限定了知識(shí)圖譜節(jié)點(diǎn)值的類型為文本、日期、數(shù)字(浮點(diǎn)型與整型)
圖中的Thing限定了節(jié)點(diǎn)的類型及其屬性(即圖1-1中的邊)
舉例說明:基于下圖Schema構(gòu)建的知識(shí)圖譜中僅可含作品、地方組織、人物;其中作品的屬性為電影與音樂、地方組織的屬性為當(dāng)?shù)氐纳虡I(yè)(eg:飯店、俱樂部等)、人物的屬性為歌手
tips:本次組隊(duì)學(xué)習(xí)不涉及schema的構(gòu)建


image.png

1.3 知識(shí)圖譜的價(jià)值在哪呢?

從圖5中可以看出,知識(shí)圖譜是人工智能很重要的一個(gè)分支, 人工智能的目標(biāo)為了讓機(jī)器具備像人一樣理性思考及做事的能力 -> 在符號(hào)主義的引領(lǐng)下,知識(shí)工程(核心內(nèi)容即建設(shè)專家系統(tǒng))取得了突破性的進(jìn)展 -> 在整個(gè)知識(shí)工程的分支下,知識(shí)表示是一個(gè)非常重要的任務(wù) -> 而知識(shí)圖譜又恰恰是知識(shí)表示的重要一環(huán)


image.png

二、怎么構(gòu)建知識(shí)圖譜呢?

2.1 知識(shí)圖譜的數(shù)據(jù)來源于哪里?

知識(shí)圖譜的構(gòu)建是后續(xù)應(yīng)用的基礎(chǔ),而且構(gòu)建的前提是需要把數(shù)據(jù)從不同的數(shù)據(jù)源中抽取出來。對(duì)于垂直領(lǐng)域的知識(shí)圖譜來說,它們的數(shù)據(jù)源主要來自兩種渠道:

  • 第一種:業(yè)務(wù)本身的數(shù)據(jù)。這部分?jǐn)?shù)據(jù)通常包含在公司內(nèi)的數(shù)據(jù)庫表并以結(jié)構(gòu)化的方式存儲(chǔ),一般只需要簡(jiǎn)單預(yù)處理即可以作為后續(xù)AI系統(tǒng)的輸入;
  • 第二種:網(wǎng)絡(luò)上公開、抓取的數(shù)據(jù)。這些數(shù)據(jù)通常是以網(wǎng)頁的形式存在所以是非結(jié)構(gòu)化的數(shù)據(jù),一般需要借助于自然語言處理等技術(shù)來提取出結(jié)構(gòu)化信息。


    image.png

    比如在下面的搜索例子里,Bill Gates和Malinda Gate的關(guān)系就可以從非結(jié)構(gòu)化數(shù)據(jù)中提煉出來,比如維基百科等數(shù)據(jù)源。

image.png

2.2 信息抽取的難點(diǎn)在哪里?

信息抽取的難點(diǎn)在于處理非結(jié)構(gòu)化數(shù)據(jù)。在下面的圖中,我們給出了一個(gè)實(shí)例。左邊是一段非結(jié)構(gòu)化的英文文本,右邊是從這些文本中抽取出來的實(shí)體和關(guān)系。


image.png

2.3 構(gòu)建知識(shí)圖譜所涉及的技術(shù)?

在構(gòu)建類似的圖譜過程當(dāng)中,主要涉及以下幾個(gè)方面的自然語言處理技術(shù):

實(shí)體命名識(shí)別(Name Entity Recognition)
關(guān)系抽?。≧elation Extraction)
實(shí)體統(tǒng)一(Entity Resolution)
指代消解(Coreference Resolution)

2.4、知識(shí)圖譜的具體構(gòu)建技術(shù)是什么?

下面針對(duì)每一項(xiàng)技術(shù)解決的問題做簡(jiǎn)單的描述,至于這些是具體怎么實(shí)現(xiàn)的,不在這里一一展開,后續(xù)課程和知識(shí)圖譜第二期的課程將會(huì)慢慢展開:


image.png

2.4.1 實(shí)體命名識(shí)別(Named Entity Recognition)

  • 實(shí)體命名識(shí)別(英語:Named Entity Recognition),簡(jiǎn)稱NER
    • 目標(biāo):就是從文本里提取出實(shí)體并對(duì)每個(gè)實(shí)體做分類/打標(biāo)簽;
    • 舉例說明:比如從上述文本里,我們可以提取出實(shí)體-“NYC”,并標(biāo)記實(shí)體類型為 “Location”;我們也可以從中提取出“Virgil's BBQ”,并標(biāo)記實(shí)體類型為“Restarant”。
    • 這種過程稱之為實(shí)體命名識(shí)別,這是一項(xiàng)相對(duì)比較成熟的技術(shù),有一些現(xiàn)成的工具可以用來做這件事情。

2.4.2 關(guān)系抽?。≧elation Extraction)

  • 關(guān)系抽?。ㄓ⒄Z:Relation Extraction),簡(jiǎn)稱 RE
    • 介紹:通過關(guān)系抽取技術(shù),把實(shí)體間的關(guān)系從文本中提取出來;
    • 舉例說明:比如實(shí)體“hotel”和“Hilton property”之間的關(guān)系為“in”;“hotel”和“Time Square”的關(guān)系為“near”等等。
image.png

2.4.3 實(shí)體統(tǒng)一(Entity Resolution)

  • 實(shí)體統(tǒng)一(英語:Entity Resolution),簡(jiǎn)稱 ER
    • 介紹:對(duì)于有些實(shí)體寫法上不一樣,但其實(shí)是指向同一個(gè)實(shí)體;
    • 舉例說明:比如“NYC”和“New York”表面上是不同的字符串,但其實(shí)指的都是紐約這個(gè)城市,需要合并。
    • 價(jià)值:實(shí)體統(tǒng)一不僅可以減少實(shí)體的種類,也可以降低圖譜的稀疏性(Sparsity);

2.4.4 指代消解(Disambiguation)

  • 指代消解(英語:Disambiguation)
    • 介紹:文本中出現(xiàn)的“it”, “he”, “she”這些詞到底指向哪個(gè)實(shí)體,比如在本文里兩個(gè)被標(biāo)記出來的“it”都指向“hotel”這個(gè)實(shí)體。


      image.png

三、知識(shí)圖譜的存儲(chǔ)

知識(shí)圖譜主要有兩種存儲(chǔ)方式:
一種是基于RDF的存儲(chǔ);
另一種是基于圖數(shù)據(jù)庫的存儲(chǔ)。
它們之間的區(qū)別如下圖所示。RDF一個(gè)重要的設(shè)計(jì)原則是數(shù)據(jù)的易發(fā)布以及共享,圖數(shù)據(jù)庫則把重點(diǎn)放在了高效的圖查詢和搜索上。其次,RDF以三元組的方式來存儲(chǔ)數(shù)據(jù)而且不包含屬性信息,但圖數(shù)據(jù)庫一般以屬性圖為基本的表示形式,所以實(shí)體和關(guān)系可以包含屬性,這就意味著更容易表達(dá)現(xiàn)實(shí)的業(yè)務(wù)場(chǎng)景。其中Neo4j系統(tǒng)目前仍是使用率最高的圖數(shù)據(jù)庫,它擁有活躍的社區(qū),而且系統(tǒng)本身的查詢效率高,但唯一的不足就是不支持準(zhǔn)分布式。相反,OrientDB和JanusGraph(原Titan)支持分布式,但這些系統(tǒng)相對(duì)較新,社區(qū)不如Neo4j活躍,這也就意味著使用過程當(dāng)中不可避免地會(huì)遇到一些刺手的問題。如果選擇使用RDF的存儲(chǔ)系統(tǒng),Jena或許一個(gè)比較不錯(cuò)的選擇。

image.png

四、Neo4J 介紹與安裝

4.1 引言

“工欲善其事,必先利其器”,知識(shí)圖譜作為一種特殊的圖結(jié)構(gòu),自然需要專門的圖數(shù)據(jù)庫進(jìn)行存儲(chǔ)。

知識(shí)圖譜由于其數(shù)據(jù)包含實(shí)體、屬性、關(guān)系等,常見的關(guān)系型數(shù)據(jù)庫諸如MySQL之類不能很好的體現(xiàn)數(shù)據(jù)的這些特點(diǎn),因此知識(shí)圖譜數(shù)據(jù)的存儲(chǔ)一般是采用圖數(shù)據(jù)庫(Graph Databases)。而Neo4j是其中最為常見的圖數(shù)據(jù)庫。

4.2 Neo4J 下載

首先在 Neo4J官網(wǎng) 下載 Neo4J。

  • Neo4J分為社區(qū)版和企業(yè)版:
    • 企業(yè)版:收費(fèi),在橫向擴(kuò)展、權(quán)限控制、運(yùn)行性能、HA等方面都比社區(qū)版好,適合正式的生產(chǎn)環(huán)境;
    • 社區(qū)版:免費(fèi),普通的學(xué)習(xí)和開發(fā)采用免費(fèi)社區(qū)版就好。

4.3 Neo4J 安裝

  • 在Mac或者Linux中,安裝好jdk后,直接解壓下載好的Neo4J包,運(yùn)行命令
  bin/neo4j start
  • windows系統(tǒng)下載好neo4j和jdk 1.8.0后,輸入以下命令啟動(dòng)后neo4j
  neo4j.bat console
image.png

4.4 Neo4J Web 界面 介紹

Neo4J提供了一個(gè)用戶友好的 Web 界面,可以進(jìn)行各項(xiàng)配置、寫入、查詢等操作,并且提供了可視化功能。類似ElasticSearch一樣,我個(gè)人非常喜歡這種開箱即用的設(shè)計(jì)。

打開瀏覽器,輸入http://127.0.0.1:7474/browser/,如下圖 13 所示,界面最上方就是交互的輸入框。

image.png

記錄一下windows安裝的坑:
image.png

image.png

如果conf文件把這句話注釋掉,就會(huì)出現(xiàn)身份未驗(yàn)證,客戶端未授權(quán)的bug,所以不能注釋掉。

4.5 Cypher查詢語言

Cypher:
介紹:是Neo4J的聲明式圖形查詢語言,允許用戶不必編寫圖形結(jié)構(gòu)的遍歷代碼,就可以對(duì)圖形數(shù)據(jù)進(jìn)行高效的查詢。
設(shè)計(jì)目的:類似SQL,適合于開發(fā)者以及在數(shù)據(jù)庫上做點(diǎn)對(duì)點(diǎn)模式(ad-hoc)查詢的專業(yè)操作人員。
其具備的能力包括:
創(chuàng)建、更新、刪除節(jié)點(diǎn)和關(guān)系
通過模式匹配來查詢和修改節(jié)點(diǎn)和關(guān)系 - 管理索引和約束等

五、Neo4J 實(shí)戰(zhàn)

5.1 引言

這個(gè)案例的節(jié)點(diǎn)主要包括人物和城市兩類,人物和人物之間有朋友、夫妻等關(guān)系,人物和城市之間有出生地的關(guān)系。特別鳴謝知乎@異塵手把手教你快速入門知識(shí)圖譜 - Neo4J教程

  • Person-Friends-PERSON
  • Person-Married-PERSON
  • Person-Born_in-Location

5.2 創(chuàng)建節(jié)點(diǎn)

  1. 刪除數(shù)據(jù)庫中以往的圖,確保一個(gè)空白的環(huán)境進(jìn)行操作【注:慎用,如果庫內(nèi)有重要信息的話】:


    image.png
  MATCH (n) DETACH DELETE n

這里,MATCH是匹配操作,而小括號(hào)()代表一個(gè)節(jié)點(diǎn)node(可理解為括號(hào)類似一個(gè)圓形),括號(hào)里面的n為標(biāo)識(shí)符。

創(chuàng)建一個(gè)人物節(jié)點(diǎn):

  CREATE (n:Person {name:'John'}) RETURN n

注:
CREATE是創(chuàng)建操作,Person是標(biāo)簽,代表節(jié)點(diǎn)的類型。
花括號(hào){}代表節(jié)點(diǎn)的屬性,屬性類似Python的字典。
這條語句的含義就是創(chuàng)建一個(gè)標(biāo)簽為Person的節(jié)點(diǎn),該節(jié)點(diǎn)具有一個(gè)name屬性,屬性值是John。
創(chuàng)建更多的人物節(jié)點(diǎn),并分別命名:

  CREATE (n:Person {name:'Sally'}) RETURN n
  CREATE (n:Person {name:'Steve'}) RETURN n
  CREATE (n:Person {name:'Mike'}) RETURN n
  CREATE (n:Person {name:'Liz'}) RETURN n
  CREATE (n:Person {name:'Shawn'}) RETURN n

如圖 15 所示,6個(gè)人物節(jié)點(diǎn)創(chuàng)建成功


image.png

創(chuàng)建地區(qū)節(jié)點(diǎn)

  CREATE (n:Location {city:'Miami', state:'FL'})
  CREATE (n:Location {city:'Boston', state:'MA'})
  CREATE (n:Location {city:'Lynn', state:'MA'})
  CREATE (n:Location {city:'Portland', state:'ME'})
  CREATE (n:Location {city:'San Francisco', state:'CA'})

可以看到,節(jié)點(diǎn)類型為Location,屬性包括city和state。

如圖 16 所示,共有6個(gè)人物節(jié)點(diǎn)、5個(gè)地區(qū)節(jié)點(diǎn),Neo4J貼心地使用不用的顏色來表示不同類型的節(jié)點(diǎn)。


image.png

5.3 創(chuàng)建關(guān)系

朋友關(guān)系

MATCH (a:Person {name:'Liz'}), 
       (b:Person {name:'Mike'}) 
 MERGE (a)-[:FRIENDS]->(b)
注:
方括號(hào)[]即為關(guān)系,F(xiàn)RIENDS為關(guān)系的類型。
注意這里的箭頭-->是有方向的,表示是從a到b的關(guān)系。 這樣,Liz和Mike之間建立了FRIENDS關(guān)系。

關(guān)系增加屬性

  MATCH (a:Person {name:'Shawn'}), 
        (b:Person {name:'Sally'}) 
  MERGE (a)-[:FRIENDS {since:2001}]->(b)

增加更多的朋友關(guān)系:

  MATCH (a:Person {name:'Shawn'}), (b:Person {name:'John'}) MERGE (a)-[:FRIENDS {since:2012}]->(b)
  MATCH (a:Person {name:'Mike'}), (b:Person {name:'Shawn'}) MERGE (a)-[:FRIENDS {since:2006}]->(b)
  MATCH (a:Person {name:'Sally'}), (b:Person {name:'Steve'}) MERGE (a)-[:FRIENDS {since:2006}]->(b)
  MATCH (a:Person {name:'Liz'}), (b:Person {name:'John'}) MERGE (a)-[:MARRIED {since:1998}]->(b)

這樣,圖譜就已經(jīng)建立好了:


image.png

5.4 創(chuàng)建 出生地關(guān)系

建立不同類型節(jié)點(diǎn)之間的關(guān)系-人物和地點(diǎn)的關(guān)系

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 {name:'Mike'}), (b:Location {city:'San Francisco'}) MERGE (a)-[:BORN_IN {year:1960}]->(b)
  MATCH (a:Person {name:'Shawn'}), (b:Location {city:'Miami'}) MERGE (a)-[:BORN_IN {year:1960}]->(b)
  MATCH (a:Person {name:'Steve'}), (b:Location {city:'Lynn'}) MERGE (a)-[:BORN_IN {year:1970}]->(b)

這里的關(guān)系是BORN_IN,表示出生地,同樣有一個(gè)屬性,表示出生年份。

如圖 18 ,在人物節(jié)點(diǎn)和地區(qū)節(jié)點(diǎn)之間,人物出生地關(guān)系已建立好。

創(chuàng)建節(jié)點(diǎn)的時(shí)候就建好關(guān)系

CREATE (a:Person {name:'Todd'})-[r:FRIENDS]->(b:Person{name:'Carlos'})

最終該圖譜如下圖所示:


image.png

5.5 圖數(shù)據(jù)庫查詢

查詢下所有在Boston出生的人物

MATCH (a:Person)-[:BORN_IN]->(b:Location {city:'Boston'}) RETURN a,b

結(jié)果如圖 19:


image.png

查詢所有對(duì)外有關(guān)系的節(jié)點(diǎn)

MATCH (a)--() RETURN a

結(jié)果如圖 20:


image.png

查詢所有有關(guān)系的節(jié)點(diǎn)

 MATCH (a)-[r]->() RETURN a.name, type(r)

結(jié)果如圖21:


image.png

查詢所有對(duì)外有關(guān)系的節(jié)點(diǎn),以及關(guān)系類型

  MATCH (a)-[r]->() RETURN a.name, type(r)

結(jié)果如圖22:

image.png

查詢所有有結(jié)婚關(guān)系的節(jié)點(diǎn)

  MATCH (n)-[:MARRIED]-() RETURN n

結(jié)果如圖 23:


image.png

查找某人的朋友的朋友

  MATCH (a:Person {name:'Mike'})-[r1:FRIENDS]-()-[r2:FRIENDS]-(friend_of_a_friend) RETURN friend_of_a_friend.name AS fofName

返回Mike的朋友的朋友,結(jié)果如圖 24:

image.png

5.6 刪除和修改

增加/修改節(jié)點(diǎn)的屬性

  MATCH (a:Person {name:'Liz'}) SET a.age=34
  MATCH (a:Person {name:'Shawn'}) SET a.age=32
  MATCH (a:Person {name:'John'}) SET a.age=44
  MATCH (a:Person {name:'Mike'}) SET a.age=25

這里,SET表示修改操作

刪除節(jié)點(diǎn)的屬性

  MATCH (a:Person {name:'Mike'}) SET a.test='test'
  MATCH (a:Person {name:'Mike'}) REMOVE a.test

刪除屬性操作主要通過REMOVE 3. 刪除節(jié)點(diǎn)

  MATCH (a:Location {city:'Portland'}) DELETE a

刪除節(jié)點(diǎn)操作是DELETE 4. 刪除有關(guān)系的節(jié)點(diǎn)

  MATCH (a:Person {name:'Todd'})-[rel]-(b:Person) DELETE a,b,rel

六、通過 Python 操作 Neo4j

6.1 neo4j模塊:執(zhí)行CQL ( cypher ) 語句

 # step 1:導(dǎo)入 Neo4j 驅(qū)動(dòng)包
  from neo4j import GraphDatabase
  # step 2:連接 Neo4j 圖數(shù)據(jù)庫
  driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password"))
  # 添加 關(guān)系 函數(shù)
  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)
  # 定義 關(guān)系函數(shù)
  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:運(yùn)行
  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")

上述程序的核心部分,抽象一下就是:

  neo4j.GraphDatabase.driver(xxxx).session().write_transaction(函數(shù)(含tx.run(CQL語句)))

或者

  neo4j.GraphDatabase.driver(xxxx).session().begin_transaction.run(CQL語句)

6.2 py2neo模塊:通過操作python變量,達(dá)到操作neo4j的目的

# step 1:導(dǎo)包
  from py2neo import Graph, Node, Relationship
  # step 2:構(gòu)建圖
  g = Graph()
  # step 3:創(chuàng)建節(jié)點(diǎn)
  tx = g.begin()
  a = Node("Person", name="Alice")
  tx.create(a)
  b = Node("Person", name="Bob")
  # step 4:創(chuàng)建邊
  ab = Relationship(a, "KNOWS", b)
  # step 5:運(yùn)行
  tx.create(ab)
  tx.commit()

py2neo模塊符合python的習(xí)慣,寫著感覺順暢,其實(shí)可以完全不會(huì)CQL也能寫

七、通過csv文件批量導(dǎo)入圖數(shù)據(jù)

前面學(xué)習(xí)的是單個(gè)創(chuàng)建節(jié)點(diǎn),不適合大批量導(dǎo)入。這里我們介紹使用neo4j-admin import命令導(dǎo)入,適合部署在docker環(huán)境下的neo4j。 其他導(dǎo)入方法也可以參考Neo4j之導(dǎo)入數(shù)據(jù)

csv分為兩個(gè)nodes.csv和relations.csv,注意關(guān)系里的起始節(jié)點(diǎn)必須是在nodes.csv里能找到的:

# nodes.csv需要指定唯一ID和nam,
  headers = [
  'unique_id:ID', # 圖數(shù)據(jù)庫中節(jié)點(diǎn)存儲(chǔ)的唯一標(biāo)識(shí)
  'name', # 節(jié)點(diǎn)展示的名稱
  'node_type:LABEL', # 節(jié)點(diǎn)的類型,比如Person和Location
  'property' # 節(jié)點(diǎn)的其他屬性
  ]
  # relations.csv
  headers = [
  'unique_id', # 圖數(shù)據(jù)庫中關(guān)系存儲(chǔ)的唯一標(biāo)識(shí)
  'begin_node_id:START_ID', # begin_node和end_node的值來自于nodes.csv中節(jié)點(diǎn)
  'end_node_id:END_ID',
  'begin_node_name',
  'end_node_name',
  'begin_node_type',
  'end_node_type',
  'relation_type:TYPE', # 關(guān)系的類型,比如Friends和Married
  'property' # 關(guān)系的其他屬性
  ]

制作出兩個(gè)csv后,通過以下步驟導(dǎo)入neo4j:

兩個(gè)文件nodes.csv ,relas.csv放在

  neo4j安裝絕對(duì)路徑/import

導(dǎo)入到圖數(shù)據(jù)庫mygraph.db

  neo4j bin/neo4j-admin import --nodes=/var/lib/neo4j/import/nodes.csv --relationships=/var/lib/neo4j/import/relas.csv   --delimiter=^ --database=mygraph.db

delimiter=^ 指的是csv的分隔符

指定neo4j使用哪個(gè)數(shù)據(jù)庫

  修改 /root/neo4j/conf/neo4j.conf 文件中的 dbms.default_database=mygraph.db

重啟neo4j就可以看到數(shù)據(jù)已經(jīng)導(dǎo)入成功了

導(dǎo)入csv的坑:

正確導(dǎo)入方法,按照教程把一些keys寫入csv里(表格形式)
nodes.csv:


image.png

relation.csv:


image.png

然后填入一些數(shù)據(jù),注意start_id和end_id一定要和關(guān)聯(lián)的第一張表的主鍵聯(lián)系起來,第一個(gè)是start_id,最后一個(gè)是end_id.
如果要把數(shù)據(jù)庫改成自己的,那么就需要把配置文件conf中的active_database改成自己的數(shù)據(jù)庫,這樣才會(huì)在你的界面中顯示出來:

dbms.active_database=mygraph.db
dbms.default_database=mygraph.db
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容