一首古詩帶來的圖資料庫大冒險

nebulagraph發表於2022-03-25

本文首發於 Nebula Graph Community 公眾號

一首古詩帶來的圖資料庫大冒險

因為圖資料庫的增長趨勢一直位列前茅,每年都有媒體預測今年是“圖年”。作為曾經的圖資料庫從業者,Nebula Hackthon 2021 的參賽隊伍臨江仙的隊長王二鐵(王建奎),一直在思考,為什麼長期火爆的圖資料庫市場,一直沒有真正引爆。在 2018 年圖資料庫輸給了區塊鏈,2019 年又遇到了 5G,隨後疫情開始了。在王二鐵看來圖資料庫目前主要還是面向 toB、toG 的市場,在 toC 領域,幾乎沒有圖資料庫相關的案例,這也是為什麼圖技術難以被大眾所熟知的原因。

於是,一個新意的 idea 冒出了,這將是一個非常好,而且還算好玩的 C 端案例。它是什麼呢?便是本次介紹的「一首古詩帶來的圖資料庫大冒險」。

念起

有次二鐵陪同小朋友上畫畫班,空閒之餘刷到了蘇軾的《臨江仙 風水洞作》:

四大從來都遍滿,此間風水何疑。故應為我發新詩。幽花香澗谷,寒藻舞淪漪。 
借與玉川生兩腋,天仙未必相思。還憑流水送人歸。層巔餘落日,草露已沾衣。

因為讀不懂這首詩詞,體會不到其中的意境美。作為老二次元的王二鐵藉由動漫迷中的「聖地巡禮」,想到用詩詞巡禮的方式--回到古詩詞的創作地,親身體驗詩詞的意境和美景。結合圖資料庫,把中國古詩詞放到圖譜裡,通過【作者搜尋】關聯出他所有的詩詞,並關聯出所有的創作地點,這就形成了一條【詩詞巡禮】的旅遊路線;通過【地點搜尋】關聯出當地所有的古詩詞創作地,這就形成了一個充滿文化氣息的詩詞城市。

基於路線、地理位置也可以衍生出更多的玩法。例如一個作者的城市足跡圖,也許就是他的升遷史;同一個地點,如果有多個作者留有詩篇,那可以互相印證和學習。結合圖,還有更多的玩法可以繼續挖掘。

而除了「聖地巡禮」這一主功能之外,二鐵還加了另外一個功能--本命詩。idea 也是來源於一首詩詞,王之渙的《涼州詞》:

黃河遠上白雲間,一片孤城萬仞山。
羌笛何須怨楊柳,春風不度玉門關。

一首包含他家小朋友名字的古詩,突然讓小朋友有了學習該詩的興趣,於是他決定加入本命詩,古詩和人親近、建立熟悉感之後,成為他記憶的一部分。

圓夢

一首古詩帶來的圖資料庫大冒險

古詩大冒險專案實現思路主要是將中國古詩詞放到圖譜裡,詩詞的圖譜需要包含作者(姓名、朝代、字、號)、詩詞(詩詞名、內容、創作地址、經度、維度)、城市,其他再包含古代城市和現代城市的對映、古人朋友圈等等,形成一張完整的圖譜。
資料來源,需要涉及到詩詞庫、百度漢語、旅遊網站、座標提取系統等等;經過資料加工、資料聚合以及圖資料庫的建模,將資料匯入圖資料庫中,一個簡單的詩詞圖譜就形成了。然後通過 Java Web提供介面服務,通過小程式提供使用者服務。整體流程就通了。

整體實現主要分成 3 步:

  1. 資料處理,資料處理是整個專案最難的點。這部分需要首先明確產品層面的需求,根據需求進行圖資料庫建模,再根據建模結果反推需要哪些資料支撐,然後尋找資料來源,並進行資料採集和 ETL 處理。最終形成圖資料庫中需要的幾個檔案,例如:vertex-詩詞.csv、vertex-作者.csv、vertex-城市.csv、edge-詩詞-作者.csv、edge-詩詞-城市.csv。
  2. 系統開發,系統開發是把第一步建設的圖譜,實際的在圖資料庫中建立並匯入資料的過程。因 Nebula 完備的產品功能和周邊工具,使得這一步的開發比較簡單。專案中使用到了 Nebula Graph 圖資料庫進行資料儲存,Nebula Graph Studio 進行圖資料庫建模和語法除錯、Nebula Graph Importer 進行資料匯入,Nebula Graph Java Client 進行 API 服務的開發。
  3. 小程式開發,系統開發之後會形成幾個 API,小程式側呼叫 API 埠,然後進行前端的視覺化展示。其中需要地圖的 SDK,結合收集到的座標,就可以在地圖上展示出詩詞的創作地點。

一首古詩帶來的圖資料庫大冒險

這個專案看似很簡單,但暗藏玄機。整個專案實現起來會遇到 2 個難點。其中一個還是資料,因為系統本身並不複雜,程式碼量並不多,核心還是對資料的理解,以及一個好的產品 sence。當然也遇到一個天坑問題,就是一些好的古詩詞找不到創作地點或者歷史上存在爭議,比如陳子昂的《登幽州臺歌》。第二個難點算技術上的廣度,就是從一個 idea,到產品化實現,要熟悉一整條技術路線。其實也並沒有多深的技術,但是需要一種不甘於只做螺絲釘的獨立開發思維。

他說

一首古詩帶來的圖資料庫大冒險的有意思的點除了它的 idea 之外,和技術實現之外。更多的產品細節也是讓人眼前一亮,像是地理位置的處理方式。

拿臨江仙·風水洞作為例,故事標誌性座標便是風水洞,如何定位這個風水洞呢?各地都有「風水洞」,根據蘇軾的過往經歷,最後匹配定位到了杭州錦繡風水洞。通過抽取風水洞的地理座標,將這首古詩還原到了該詩聖地。而這塊的實現也經歷了一番小波折,大家都知道 Nebula Graph v2.6 開始支援的 GEO 功能,一開始二鐵他們考慮要不要用 GEO,而不是存經緯度。但轉念一想,專案本身並不需要用到強大的 Nebula Graph GEO 功能,加上專案趕時間(比賽設有程式碼截止提交時間),故沒嘗試新的 GEO 功能。

說到後續的專案規劃,王二鐵表示,“圖資料庫中更核心的最短路徑、三角計數、社群發現等演算法並沒有用到,大家可以發揮想想來給我們提想法,當然更歡迎自己來實際體驗和實現”。

續緣

戳連結可檢視其專案設計文稿:https://github.com/Jerrick/a-tour-of-poetry/blob/main/README.md。BTW,二鐵曾作客 Nebula Graph Podcast 分享他本次實踐的心路歷程,閱讀本文的你可以戳連結聽該期 Podcast 哦:http://xima.tv/1_etO1vh?_sonic=0


交流圖資料庫技術?加入 Nebula 交流群請先填寫下你的 Nebula 名片,Nebula 小助手會拉你進群~~

關注公眾號

相關文章