清華、北大、985 高校教師之間有啥關係?Neo4j 創建知識圖譜一查便知

本文主要講解知識圖譜及Neo4j圖數據庫的用法,是作者學習《Neo4j基礎入門》書籍的在線筆記,同時以高校網絡安全方向教師的關係圖譜為例,重點介紹了圖數據庫查詢語句的基本用法。

非常基礎的文章,希望大家喜歡,尤其是研究自然語言處理和知識圖譜的同學。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

作者 | 楊秀璋

來源 | CSDN博客專家Eastmount

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

知識圖譜

構建的知識圖譜效果如下圖所示,涉及教師實體、高校實體、高校圈實體和Title實體。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

1.創建圖數據庫

第一步:創建新Graph,點擊“Create a Local Graph”,命名為“Graph0801”。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

第二步:點擊“Start”按鈕開啟圖數據庫服務器,點擊“Manage”管理頁面,接著點擊“Open Browser”打開瀏覽器。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

彈出如下所示界面,該界面中可以 輸入CQL語句編輯圖數據庫。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

第三步:導入本地CSV數據,創建實體數據。

點擊“Open Folder”->“Import”打開圖數據庫本地文件夾,並放入相關的CSV文件。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

C:\\Users\\yxz.Neo4jDesktop\\neo4jDatabases\\database-dffc101f-9a56-45bc-9d08-fd4079c10b60\\installation-3.4.1\\import

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

2.創建實體節點

第四步:導入教師實體(people.csv)、高校實體(school.csv)、高校群實體(china.csv)和級別實體(title.csv)。

其中教師實體CSV文件打開如下圖所示,不包括教師編號、所在學校、所在學院、教師姓名、教師職稱、教師級別、學位、畢業學校、研究方向、郵箱和電話等信息。

你可能會疑問,這些信息作者是如何獲取的?

當然是人工百度高校計算機或網絡安全學院,然後找到每個老師信息並抓取至本地表格中,是不是給跪了,哈哈。在做真實的知識圖譜時,我們需要結合網絡爬蟲或者自身企業的數據庫完成,這裡僅僅是一個demo,用來展示高校網絡安全方向教師的關係圖譜。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

PS:CSV文件需要設置編碼方式為UTF-8,否則會出現中文亂碼,本地TXT打開另存為設置即可。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

(1) 教師實體 people.csv

<code> 1id,school,college,name,rank,title,degree,graduation,research,email
21,北京大學,計算機科學技術研究所,肖建國,教授,,碩士,北京大學,圖形與圖像處理技術;網絡與信息安全技術,[email protected]
32,清華大學,網絡科學與網絡空間研究院,吳建平,教授,院士,,,,
43,清華大學,網絡科學與網絡空間研究院,李星,教授,,,,,
54,清華大學,網絡科學與網絡空間研究院,畢軍,教授,長江學者特聘教授,博士,清華大學,新型網絡體系結構領域;IPv6源地址驗證;軟件定義網SDN和網絡功能虛擬化NFV;互聯網路由,[email protected]
65,清華大學,網絡科學與網絡空間研究院,段海新,教授,,博士,清華大學,網絡安全;網絡測量;入侵檢測;漏洞挖掘;物聯網安全;互聯網治理,[email protected]
76,清華大學,網絡科學與網絡空間研究院,楊家海,教授,,博士,清華大學,IPv6及新一代互聯網體系結構;互聯網絡管理;網絡測量與網絡空間安全;雲計算、虛擬化及資源管理調度,[email protected]
87,清華大學,網絡科學與網絡空間研究院,王之梁,副教授,,博士,清華大學,網絡協議形式化驗證與測試;新一代互聯網體系結構;互聯網路由體系結構及協議;軟件定義網絡SDN;網絡測量與監測;網絡安全,[email protected]
98,清華大學,網絡科學與網絡空間研究院,張超,副教授,國家“千人計劃”青年項目,博士,北京大學,軟件與系統安全;漏洞、攻防、惡意代碼;AI與安全;物聯網及區塊鏈等應用安全;軟件分析、虛擬化等技術,[email protected]

109,清華大學,網絡科學與網絡空間研究院,李琦,副教授,,博士,清華大學,互聯網和雲安全、移動安全;機器學習與安全、大數據安全;區塊鏈與安全,[email protected]
1110,武漢大學,國家網絡安全學院,吳黎兵,教授,,博士,武漢大學,"並行分佈計算,大數據安全",[email protected]
1211,武漢大學,國家網絡安全學院,竇賢康,教授,院士,博士,法國巴黎第七大學,高層大氣理論、觀測與實驗綜合研究,[email protected]
1312,武漢大學,國家網絡安全學院,杜瑞穎,教授,,博士,武漢大學,網絡安全、隱私保護,[email protected]
1413,武漢大學,國家網絡安全學院,崔曉暉,教授,湖北省“百人計劃”,博士, 路易斯維爾大學,大數據分析、人工智能、區塊鏈、高性能計算,[email protected]
1514,武漢大學,國家網絡安全學院,陳剛,教授,,博士,武漢大學,網絡安全、Web技術與應用、人工智能,[email protected]
1615,武漢大學,國家網絡安全學院,董紅斌,教授,,博士,,"Web搜索與挖掘,安防應急,大數據安全",[email protected]
1716,武漢大學,國家網絡安全學院,姬東鴻,教授,武漢大學“珞珈青年學者”,博士,武漢大學;牛津大學,自然語言處理、社會計算、深度學習、大數據平臺和對話機器人。實驗室既強調前沿研究,也強調應用研究。,[email protected]
1817,武漢大學,國家網絡安全學院,何德彪,教授,武漢大學“珞珈青年學者”,博士,武漢大學,應用密碼學、區塊鏈安全、雲計算安全、物聯網安全,[email protected]

1918,武漢大學,國家網絡安全學院,王騫,教授,國家“青年千人計劃”,博士,伊利諾伊理工大學,人工智能安全、雲計算安全與隱私、無線系統安全與移動感知、應用密碼學,[email protected]
2019,武漢大學,國家網絡安全學院,傅建明,教授,,博士,武漢大學,逆向分析,惡意代碼檢測,漏洞分析與防禦,軟件評估和安全加固, 網絡安全,[email protected]
2120,武漢大學,國家網絡安全學院,王麗娜,教授,國務院政府特殊津貼獲得者,博士,東北大學,網絡安全,系統安全,人工智能安全,[email protected]
2221,武漢大學,國家網絡安全學院,唐明,教授,,博士,武漢大學,密碼學,信息安全,密碼芯片安全,密碼系統安全,[email protected]
2322,武漢大學,國家網絡安全學院,彭國軍,教授,武漢大學“珞珈青年學者”。,博士,武漢大學,網絡與信息系統安全、惡意軟件分析與檢測、軟件漏洞、可信軟件等,[email protected]
2423,武漢大學,國家網絡安全學院,葉登攀,教授,,博士,南京理工大學,大數據多媒體安全,機器學習與隱私保護,網絡安全感知與防禦,網絡空間隱匿對抗,[email protected]
2524,武漢大學,國家網絡安全學院,陳晶,教授,武漢市黃鶴英才,珞珈青年學者,博士,華中科技大學,大數據安全、雲安全、移動安全、網絡安全、身份認證與管理、區塊鏈,[email protected]
2625,武漢大學,國家網絡安全學院,李俊娥,教授,,博士,武漢大學,計算機網絡體系結構、網絡與信息安全、網絡性能與服務質量、電網信息物理系統,[email protected]

2726,武漢大學,國家網絡安全學院,王志波,教授,,博士,浙江大學,物聯網、移動感知與計算、大數據、網絡安全與隱私保護、人工智能安全,[email protected]
2827,武漢大學,國家網絡安全學院,趙波,教授,,博士,武漢大學,密碼學應用、信息系統安全、可信計算、嵌入式系統及雲計算安全、網絡安全技術,[email protected]
2928,中國科學技術大學,網絡空間安全學院,吳曼青,教授/博導,院士,,,網絡信息安全;大數據安全,[email protected]
3029,中國科學技術大學,網絡空間安全學院,郭光燦,教授/博導,院士,,,量子信息;量子光學;信息安全,[email protected]
/<code>

接著執行如下語句導入29位教師信息,其中實體表為People,包括屬性id、name、school、college等。

<code>1LOAD CSV WITH HEADERS FROM "file:///people.csv" AS line
2MERGE (p:People{id:line.id,name:line.name,school:line.school,
3 college:line.college,rank:line.rank,title:line.title,
4 degree:line.degree,graduation:line.graduation,
5 research:line.research,email:line.email})
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

接著通過 match(n) return n 查看節點,顯示如下圖所示,可以設置顏色及大小。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

(2) 高校實體 people.csv

高校實體包括四個屬性,序號、中文名稱、英文名稱和所屬類別,讀者可以結合實際情況自行增加。

<code>1id,name,ename,type
2s1,北京大學,Peking University,985
3s2,清華大學,Tsinghua University,985
4s3,武漢大學,Wuhan University,985
5s4,中國科學技術大學,University of Science and Technology of China,985
/<code>

執行命令如下:

<code>1LOAD CSV WITH HEADERS FROM "file:///school.csv" AS line
2MERGE (p:School{id:line.id,name:line.name,ename:line.ename,type:line.type})
/<code>

此時增加了兩類實體,選中某個實體還能查看其屬性及屬性值 。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

(3) 高校群實體 china.csv

高校群實體主要想把高校劃分為不同組織或圈子,比如985院校、211工程、雙一流大學、C9高校等。建議讀者結合自身需要進行設計更為合理的實體類別。

<code>1id,name
2c1,中國985高校
3c2,中國211高校

4c3,中國雙一流高校
/<code>

執行命令如下:

<code>1LOAD CSV WITH HEADERS FROM "file:///china.csv" AS line
2MERGE (p:China{id:line.id,name:line.name})
/<code>

(4) 稱呼級別實體 title.csv

稱呼級別實體是作者想查看院士、長江學者他們的圈子。後續建議讀者將論文合作關係、基金課題合作關係、組織合作關係等加入。

<code>1id,name
2t1,院士
3t2,長江學者
/<code>

執行命令如下:

<code>1LOAD CSV WITH HEADERS FROM "file:///title.csv" AS line
2MERGE (p:Title{id:line.id,name:line.name})
/<code>

此時包含了四種類別的實體,如下圖所示。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

3.創建實體間關係

(1) 教師-高校關係 rel-ps.csv

<code> 1from_id,type,to_id
21,屬於,s1
32,屬於,s2
43,屬於,s2
54,屬於,s2
65,屬於,s2
76,屬於,s2
87,屬於,s2
98,屬於,s2
109,屬於,s2
1110,屬於,s3
1211,屬於,s3
1312,屬於,s3
1413,屬於,s3
1514,屬於,s3
1615,屬於,s3
1716,屬於,s3
1817,屬於,s3
1918,屬於,s3
2019,屬於,s3
2120,屬於,s3
2221,屬於,s3
2322,屬於,s3
2423,屬於,s3
2524,屬於,s3
2625,屬於,s3
2726,屬於,s3
2827,屬於,s3
2928,屬於,s4
3029,屬於,s4
/<code>

CQL代碼如下,需要注意 from_id(關係起始) 和 to_id(關係介紹),包含的屬性需要和CSV表格一致。

<code>1LOAD CSV WITH HEADERS FROM "file:///rel-ps.csv" AS line
2match (from:People{id:line.from_id}),(to:School{id:line.to_id})

3merge (from)-[r:屬於{type:line.type}]->(to)
/<code>

(2) 學校-高校群關係 rel-sc.csv

<code>1from_id,type,to_id
2s1,隸屬,c1
3s2,隸屬,c1
4s3,隸屬,c1
5s4,隸屬,c1
/<code>

CQL導入關係代碼如下:

<code>1LOAD CSV WITH HEADERS FROM "file:///rel-sc.csv" AS line
2match (from:School{id:line.from_id}),(to:China{id:line.to_id})
3merge (from)-[r:隸屬{type:line.type}]->(to)
/<code>

(3) 教師-級別關係 rel-pt.csv

<code>1from_id,type,to_id
22,是,t1
311,是,t1
428,是,t1
529,是,t1
64,是,t2
/<code>

CQL導入關係代碼如下:

<code>1LOAD CSV WITH HEADERS FROM "file:///rel-sc.csv" AS line
2match (from:School{id:line.from_id}),(to:China{id:line.to_id})
3merge (from)-[r:隸屬{type:line.type}]->(to)
/<code>

此時的運行結果如下所示,包括:四所大學、院士、中國985高校、教師之間的關係。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

4.獲取實體關係的頂層概念關係

<code>1call db.schema
/<code>

顯示結果如下圖所示:

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

注意:如果在導入數據過程中出現錯誤,需要刪除關係、節點,則使用下面代碼。

<code> 1// 刪除節點及關係
2MATCH (n)-[r]-
3DELETE n,r
4match(n) return n
5
6// 刪除關係

7MATCH (n)-[r]-
8DELETE r
9
10// 單純刪除所以節點
11match (n)
12delete n
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

查詢語句

1.節點信息查詢

  • match指令查找匹配條件{name: “楊家海”}的節點信息,可以看到返回的節點及其屬性。

<code>1match (people {name: "楊家海"}) return people
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知
  • 查詢10個教師的姓名屬性

<code>1match (p: People) return p.name limit 10
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知
  • 條件查詢北京大學或清華大學教師的信息

<code>1match (p: People)
2where p.school="清華大學" or p.school="北京大學"
3return p.id, p.name, p.school
/<code>

2.關係查詢

  • 查找清華大學隸屬的級別

<code>1match (s: School {name: "清華大學"})-[:隸屬]->(People)
2return s, People
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知
  • 查找清華大學的所有教師。該指令匹配學校節點類型為“清華大學”的節點,然後匹配該節點屬於關係,並且教師指向該大學的節點,返回結果如下所示。

<code>1match (p)-[:屬於]->(s: School {name: "清華大學"})
2return s, p
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知
  • 查找某個老師隸屬於哪個大學,School或s僅表示一個變量。

<code>1match (p {name:"楊家海"})-[:屬於]->(School)
2return School.name
3
4match (p {name:"楊家海"})-[:屬於]->(s)
5return s.name
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知
  • 查找與“楊家海”老師同一個學校的老師

該指令匹配節點類型為People,屬性為{name: “楊家海”}的節點,接著通過 [:屬於] 關係指向的節點m,並同時匹配某個節點coPeople也通過關係 [:屬於] 指向節點m,然後返回匹配節點m的name和school屬性,輸出結果如下圖所示。

<code>1match (p: People {name: "楊家海"})-[:屬於]->(m)2return coPeople.name, coPeople.school
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知
  • 查找與中國科學技術大學相關的教師

匹配節點類型為People的節點,然後匹配節點類型為School、節點屬性為 {name: “中國科學技術大學”} 的節點,最後匹配他們兩者之間存在的關係,將教師、關係類型和關係同時返回。

<code>1match(p:People)-[relateTo]-(s:School {name: "中國科學技術大學"})
2return p.name, type(relateTo), relateTo, s.name

/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

3.查詢關係路徑

  • 查找與“楊家海”老師存在3條及以內關係的老師和學校

<code>1match (p:People {name:"楊家海"})-[*1..3]-(s)
2return distinct s
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知
  • 查找老師“楊家海”和“王騫”之間的最短關係路徑

下圖有效展示了“楊家海”老師屬於清華大學,二“王騫”老師屬於武漢大學,他們均是985高校關聯在一起。

<code>1match p=shortestPath(
2 (b:People {name:"楊家海"})-[*]-(m:People {name:"王騫"})
3)
4return p
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

4.好友推薦

  • 查找沒有與“楊家海”老師合作過的老師

    查找與“楊家海”老師沒有合作,但是楊老師的合作伙伴曾經有或者或關係的老師,實現推薦。

  • 尋找的是cocoPeople 其中coPeople是中間人,“院士”。該題目尋找“院士”人物推薦給“楊家海”老師,其中關聯是“”老師,他是清華大學的院士,出現次數排序。

<code>1match (p:People {name:"楊家海"})-[:屬於]->(m)2 (coPeople)-[:是]->(m2)3where not (p)-[:屬於]->(m2)
4return cocoPeople.name as Recommended, count(*) as len
5order by len desc
/<code>
清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知
  • 找人介紹清華大學的“楊家海”老師給武漢大學的“竇賢康”院士認識

<code>1match (p:People {name:"楊家海"})-[:屬於]->(m)2 (coPeople)-[:是]->(m2)3return p, m, coPeople, m2, c
/<code>

由圖可知:這個圖是查找“楊家海”老師通過院士“吳建平”院士認識竇院士。

PS:後面如果做貴州旅遊知識圖譜,比如說去鎮遠,就能推薦黔東南景區或者貴州排名高的景區或全國古鎮景區給遊客。

清华、北大、985 高校教师之间有啥关系?Neo4j 创建知识图谱一查便知

原文鏈接:

https://blog.csdn.net/Eastmount/article/details/98208426


分享到:


相關文章: