發表文章

目前顯示的是有「Neo4j」標籤的文章

用Neo4j撈取資料的一些小技巧:以SWAPI為例

圖片
在網路上已經有許多neo4j匯入外部資料的教學影片,這裡嘗試分享一些Cypher的撰寫技巧,用以解決幾個匯入時會遇到的小問題。 SWAPI  是  (:Starwars Fan :ProgrammingGeek)  應該都熟知的API,它提供不少星戰電影中的資訊(雖然不是最多...只有正史、而且只到 第七部曲 ):例如Planets(行星)、Spaceships(太空船)、Vehicles(太空船之外的交通工具)、People(人物)、Films(影片)、以及Species(種族)等等。 常見的撈取資料寫法大致像是這樣: WITH ' https://swapi.co/api/people/?format=json' AS url CALL apoc.load.json(url) YIELD value UNWIND value.results AS p CREATE (n: StarWarsPerson ) SET n.name=p.name, n.height=p.height, n.mass=p.mass... RETURN n; 問題一、API一次只給一部份資料 不過這裡遇到一個問題,許多API都不會一次給你所有的資料,以SWAPI為例,資料庫明明有87個人,但若不指定號碼的話,它只會吐給你前十個;除非你指定人物編號、一個一個撈出來,例如 WITH ' https://swapi.co/api/people/ 88 /?format=json' AS url CALL apoc.load.json(url) YIELD value AS p CREATE (n: StarWarsPerson ) SET n.name=p.name, n.height=p.height, n.mass=p.mass RETURN n; 指定88號,我們得到了 Captain Phasma 。 除非運用programming language API(例如Java API),否則要一個一個撈還挺煩的。不過畢竟Neo4j還是有一點迴圈的能力,所以如果我們用下面這個小技巧,以動態產生網址的方式就可以解決掉第一個問題: UNWIND range( 1 , 88 ) AS i CALL apoc....

以圖形資料建構Star Wars星戰宇宙中的行星們

圖片
Star Wars Universe(星際大戰宇宙,以下簡稱星戰宇宙)是一個極為龐大的科幻空間/文本。歷經了近半個世紀的集體創作,光是累積出來的虛構單元,例如人物、星球/星系、城市、語文、種族、科技物...等等,就多到難以勝數,加上發生在這龐大的人、事、物之間、橫跨萬年以上的複雜故事情節,規模可說非常壯觀。 從資訊量與知識架構的角度,除了官方資料之外,網路上熱心整理星戰宇宙素材的網友也是多到不勝枚舉,也有許多提供機器可讀取的格式。因為備課的需求,我便想利用這些資料來建立一個星戰宇宙圖(graph),做為大學課程的教材。