一首古詩帶來的圖數(shù)據(jù)庫大冒險

因為圖數(shù)據(jù)庫的增長趨勢一直位列前茅,每年都有媒體預(yù)測今年是“圖年”。作為曾經(jīng)的圖數(shù)據(jù)庫從業(yè)者,Nebula Hackthon 2021 的參賽隊伍臨江仙的隊長王二鐵(王建奎),一直在思考,為什么長期火爆的圖數(shù)據(jù)庫市場,一直沒有真正引爆。在 2018 年圖數(shù)據(jù)庫輸給了區(qū)塊鏈,2019 年又遇到了 5G,隨后疫情開始了。在王二鐵看來圖數(shù)據(jù)庫目前主要還是面向 toB、toG 的市場,在 toC 領(lǐng)域,幾乎沒有圖數(shù)據(jù)庫相關(guān)的案例,這也是為什么圖技術(shù)難以被大眾所熟知的原因。
于是,一個新意的 idea 冒出了,這將是一個非常好,而且還算好玩的 C 端案例。它是什么呢?便是本次介紹的「一首古詩帶來的圖數(shù)據(jù)庫大冒險」。
有次二鐵陪同小朋友上畫畫班,空閑之余刷到了蘇軾的《臨江仙 風(fēng)水洞作》:
四大從來都遍滿,此間風(fēng)水何疑。故應(yīng)為我發(fā)新詩。幽花香澗谷,寒藻舞淪漪。
借與玉川生兩腋,天仙未必相思。還憑流水送人歸。層巔余落日,草露已沾衣。
因為讀不懂這首詩詞,體會不到其中的意境美。作為老二次元的王二鐵借由動漫迷中的「圣地巡禮」,想到用詩詞巡禮的方式–回到古詩詞的創(chuàng)作地,親身體驗詩詞的意境和美景。結(jié)合圖數(shù)據(jù)庫,把中國古詩詞放到圖譜里,通過【作者搜索】關(guān)聯(lián)出他所有的詩詞,并關(guān)聯(lián)出所有的創(chuàng)作地點,這就形成了一條【詩詞巡禮】的旅游路線;通過【地點搜索】關(guān)聯(lián)出當(dāng)?shù)厮械墓旁娫~創(chuàng)作地,這就形成了一個充滿文化氣息的詩詞城市。
基于路線、地理位置也可以衍生出更多的玩法。例如一個作者的城市足跡圖,也許就是他的升遷史;同一個地點,如果有多個作者留有詩篇,那可以互相印證和學(xué)習(xí)。結(jié)合圖,還有更多的玩法可以繼續(xù)挖掘。
而除了「圣地巡禮」這一主功能之外,二鐵還加了另外一個功能–本命詩。idea 也是來源于一首詩詞,王之渙的《涼州詞》:
黃河遠上白云間,一片孤城萬仞山。
羌笛何須怨楊柳,春風(fēng)不度玉門關(guān)。
一首包含他家小朋友名字的古詩,突然讓小朋友有了學(xué)習(xí)該詩的興趣,于是他決定加入本命詩,古詩和人親近、建立熟悉感之后,成為他記憶的一部分。
古詩大冒險項目實現(xiàn)思路主要是將中國古詩詞放到圖譜里,詩詞的圖譜需要包含作者(姓名、朝代、字、號)、詩詞(詩詞名、內(nèi)容、創(chuàng)作地址、經(jīng)度、維度)、城市,其他再包含古代城市和現(xiàn)代城市的映射、古人朋友圈等等,形成一張完整的圖譜。 數(shù)據(jù)源,需要涉及到詩詞庫、百度漢語、旅游網(wǎng)站、坐標(biāo)提取系統(tǒng)等等;經(jīng)過數(shù)據(jù)加工、數(shù)據(jù)聚合以及圖數(shù)據(jù)庫的建模,將數(shù)據(jù)導(dǎo)入圖數(shù)據(jù)庫中,一個簡單的詩詞圖譜就形成了。然后通過 Java Web提供接口服務(wù),通過小程序提供用戶服務(wù)。整體流程就通了。
整體實現(xiàn)主要分成 3 步:
- 數(shù)據(jù)處理,數(shù)據(jù)處理是整個項目最難的點。這部分需要首先明確產(chǎn)品層面的需求,根據(jù)需求進行圖數(shù)據(jù)庫建模,再根據(jù)建模結(jié)果反推需要哪些數(shù)據(jù)支撐,然后尋找數(shù)據(jù)源,并進行數(shù)據(jù)采集和 ETL 處理。最終形成圖數(shù)據(jù)庫中需要的幾個文件,例如:vertex-詩詞.csv、vertex-作者.csv、vertex-城市.csv、edge-詩詞-作者.csv、edge-詩詞-城市.csv。
- 系統(tǒng)開發(fā),系統(tǒng)開發(fā)是把第一步建設(shè)的圖譜,實際的在圖數(shù)據(jù)庫中創(chuàng)建并導(dǎo)入數(shù)據(jù)的過程。因 Nebula 完備的產(chǎn)品功能和周邊工具,使得這一步的開發(fā)比較簡單。項目中使用到了 Nebula Graph 圖數(shù)據(jù)庫進行數(shù)據(jù)存儲,Nebula Graph Studio 進行圖數(shù)據(jù)庫建模和語法調(diào)試、Nebula Graph Importer 進行數(shù)據(jù)導(dǎo)入,Nebula Graph Java Client 進行 API 服務(wù)的開發(fā)。
- 小程序開發(fā),系統(tǒng)開發(fā)之后會形成幾個 API,小程序側(cè)調(diào)用 API 端口,然后進行前端的可視化展示。其中需要地圖的 SDK,結(jié)合收集到的坐標(biāo),就可以在地圖上展示出詩詞的創(chuàng)作地點。
這個項目看似很簡單,但暗藏玄機。整個項目實現(xiàn)起來會遇到 2 個難點。其中一個還是數(shù)據(jù),因為系統(tǒng)本身并不復(fù)雜,代碼量并不多,核心還是對數(shù)據(jù)的理解,以及一個好的產(chǎn)品 sence。當(dāng)然也遇到一個天坑問題,就是一些好的古詩詞找不到創(chuàng)作地點或者歷史上存在爭議,比如陳子昂的《登幽州臺歌》。第二個難點算技術(shù)上的廣度,就是從一個 idea,到產(chǎn)品化實現(xiàn),要熟悉一整條技術(shù)路線。其實也并沒有多深的技術(shù),但是需要一種不甘于只做螺絲釘?shù)莫毩㈤_發(fā)思維。
一首古詩帶來的圖數(shù)據(jù)庫大冒險的有意思的點除了它的 idea 之外,和技術(shù)實現(xiàn)之外。更多的產(chǎn)品細節(jié)也是讓人眼前一亮,像是地理位置的處理方式。
拿臨江仙·風(fēng)水洞作為例,故事標(biāo)志性坐標(biāo)便是風(fēng)水洞,如何定位這個風(fēng)水洞呢?各地都有「風(fēng)水洞」,根據(jù)蘇軾的過往經(jīng)歷,最后匹配定位到了杭州錦繡風(fēng)水洞。通過抽取風(fēng)水洞的地理坐標(biāo),將這首古詩還原到了該詩圣地。而這塊的實現(xiàn)也經(jīng)歷了一番小波折,大家都知道 Nebula Graph v2.6 開始支持的 GEO 功能,一開始二鐵他們考慮要不要用 GEO,而不是存經(jīng)緯度。但轉(zhuǎn)念一想,項目本身并不需要用到強大的 Nebula Graph GEO 功能,加上項目趕時間(比賽設(shè)有代碼截止提交時間),故沒嘗試新的 GEO 功能。
說到后續(xù)的項目規(guī)劃,王二鐵表示,“圖數(shù)據(jù)庫中更核心的最短路徑、三角計數(shù)、社區(qū)發(fā)現(xiàn)等算法并沒有用到,大家可以發(fā)揮想想來給我們提想法,當(dāng)然更歡迎自己來實際體驗和實現(xiàn)”。
[免責(zé)聲明]
原文標(biāo)題: 一首古詩帶來的圖數(shù)據(jù)庫大冒險
本文由作者原創(chuàng)發(fā)布于36氪企服點評;未經(jīng)許可,禁止轉(zhuǎn)載。




