小言_互联网的博客

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

816人阅读  评论(0)

本文主要讲解知识图谱及Neo4j图数据库的用法,是作者学习《Neo4j基础入门》书籍的在线笔记,同时以高校网络安全方向教师的关系图谱为例,重点介绍了图数据库查询语句的基本用法。

非常基础的文章,希望大家喜欢,尤其是研究自然语言处理和知识图谱的同学。

作者 | 杨秀璋

来源 | CSDN博客专家Eastmount

责编 | 夕颜

知识图谱

构建的知识图谱效果如下图所示,涉及教师实体、高校实体、高校圈实体和Title实体。

1.创建图数据库

第一步:创建新Graph,点击“Create a Local Graph”,命名为“Graph0801”。

 

第二步:点击“Start”按钮开启图数据库服务器,点击“Manage”管理页面,接着点击“Open Browser”打开浏览器。

 

弹出如下所示界面,该界面中可以 输入CQL语句编辑图数据库。

第三步:导入本地CSV数据,创建实体数据。

点击“Open Folder”->“Import”打开图数据库本地文件夹,并放入相关的CSV文件。

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

2.创建实体节点

第四步:导入教师实体(people.csv)、高校实体(school.csv)、高校群实体(china.csv)和级别实体(title.csv)。

其中教师实体CSV文件打开如下图所示,不包括教师编号、所在学校、所在学院、教师姓名、教师职称、教师级别、学位、毕业学校、研究方向、邮箱和电话等信息。

你可能会疑问,这些信息作者是如何获取的?

当然是人工百度高校计算机或网络安全学院,然后找到每个老师信息并抓取至本地表格中,是不是给跪了,哈哈。在做真实的知识图谱时,我们需要结合网络爬虫或者自身企业的数据库完成,这里仅仅是一个demo,用来展示高校网络安全方向教师的关系图谱。

PS:CSV文件需要设置编码方式为UTF-8,否则会出现中文乱码,本地TXT打开另存为设置即可。

(1) 教师实体 people.csv


   
  1. 1id,school,college,name,rank,title,degree,graduation,research,email
  2. 21,北京大学,计算机科学技术研究所,肖建国,教授,NULL,硕士,北京大学,图形与图像处理技术;网络与信息安全技术,xiaojianguo@pku.edu.cn 
  3. 32,清华大学,网络科学与网络空间研究院,吴建平,教授,院士,NULL,NULL,NULL,NULL
  4. 43,清华大学,网络科学与网络空间研究院,李星,教授,NULL,NULL,NULL,NULL,NULL
  5. 54,清华大学,网络科学与网络空间研究院,毕军,教授,长江学者特聘教授,博士,清华大学,新型网络体系结构领域;IPv6源地址验证;软件定义网SDN和网络功能虚拟化NFV;互联网路由,junbi@tsinghua.edu.cn
  6. 65,清华大学,网络科学与网络空间研究院,段海新,教授,NULL,博士,清华大学,网络安全;网络测量;入侵检测;漏洞挖掘;物联网安全;互联网治理,duanhx@tsinghua.edu.cn
  7. 76,清华大学,网络科学与网络空间研究院,杨家海,教授,NULL,博士,清华大学,IPv6及新一代互联网体系结构;互联网络管理;网络测量与网络空间安全;云计算、虚拟化及资源管理调度,yang@cernet.edu.cn
  8. 87,清华大学,网络科学与网络空间研究院,王之梁,副教授,NULL,博士,清华大学,网络协议形式化验证与测试;新一代互联网体系结构;互联网路由体系结构及协议;软件定义网络SDN;网络测量与监测;网络安全,wzl@cernet.edu.cn
  9. 98,清华大学,网络科学与网络空间研究院,张超,副教授,国家“千人计划”青年项目,博士,北京大学,软件与系统安全;漏洞、攻防、恶意代码;AI与安全;物联网及区块链等应用安全;软件分析、虚拟化等技术,chaoz@tsinghua.edu.cn
  10. 109,清华大学,网络科学与网络空间研究院,李琦,副教授,NULL,博士,清华大学,互联网和云安全、移动安全;机器学习与安全、大数据安全;区块链与安全,qli01@tsinghua.edu.cn
  11. 1110,武汉大学,国家网络安全学院,吴黎兵,教授,NULL,博士,武汉大学, "并行分布计算,大数据安全",wu@whu.edu.cn
  12. 1211,武汉大学,国家网络安全学院,窦贤康,教授,院士,博士,法国巴黎第七大学,高层大气理论、观测与实验综合研究,dou@ustc.edu.cn
  13. 1312,武汉大学,国家网络安全学院,杜瑞颖,教授,NULL,博士,武汉大学,网络安全、隐私保护,duraying@ 126.com
  14. 1413,武汉大学,国家网络安全学院,崔晓晖,教授,湖北省“百人计划”,博士, 路易斯维尔大学,大数据分析、人工智能、区块链、高性能计算,xcui@whu.edu.cn
  15. 1514,武汉大学,国家网络安全学院,陈刚,教授,NULL,博士,武汉大学,网络安全、Web技术与应用、人工智能,chenzuolin@whu.edu.cn
  16. 1615,武汉大学,国家网络安全学院,董红斌,教授,NULL,博士,NULL, "Web搜索与挖掘,安防应急,大数据安全",hbdong@whu.edu.cn
  17. 1716,武汉大学,国家网络安全学院,姬东鸿,教授,武汉大学“珞珈青年学者”,博士,武汉大学;牛津大学,自然语言处理、社会计算、深度学习、大数据平台和对话机器人。实验室既强调前沿研究,也强调应用研究。,dhji@whu.edu.cn
  18. 1817,武汉大学,国家网络安全学院,何德彪,教授,武汉大学“珞珈青年学者”,博士,武汉大学,应用密码学、区块链安全、云计算安全、物联网安全,hedebiao@whu.edu.cn
  19. 1918,武汉大学,国家网络安全学院,王骞,教授,国家“青年千人计划”,博士,伊利诺伊理工大学,人工智能安全、云计算安全与隐私、无线系统安全与移动感知、应用密码学,qianwang@whu.edu.cn
  20. 2019,武汉大学,国家网络安全学院,傅建明,教授,NULL,博士,武汉大学,逆向分析,恶意代码检测,漏洞分析与防御,软件评估和安全加固, 网络安全,jmfu@whu.edu.cn
  21. 2120,武汉大学,国家网络安全学院,王丽娜,教授,国务院政府特殊津贴获得者,博士,东北大学,网络安全,系统安全,人工智能安全,lnwang@whu.edu.cn
  22. 2221,武汉大学,国家网络安全学院,唐明,教授,NULL,博士,武汉大学,密码学,信息安全,密码芯片安全,密码系统安全,m.tang@ 126.com
  23. 2322,武汉大学,国家网络安全学院,彭国军,教授,武汉大学“珞珈青年学者”。,博士,武汉大学,网络与信息系统安全、恶意软件分析与检测、软件漏洞、可信软件等,guojpeng@whu.edu.cn
  24. 2423,武汉大学,国家网络安全学院,叶登攀,教授,NULL,博士,南京理工大学,大数据多媒体安全,机器学习与隐私保护,网络安全感知与防御,网络空间隐匿对抗,yedp@whu.edu.cn
  25. 2524,武汉大学,国家网络安全学院,陈晶,教授,武汉市黄鹤英才,珞珈青年学者,博士,华中科技大学,大数据安全、云安全、移动安全、网络安全、身份认证与管理、区块链,chenjing@whu.edu.cn
  26. 2625,武汉大学,国家网络安全学院,李俊娥,教授,NULL,博士,武汉大学,计算机网络体系结构、网络与信息安全、网络性能与服务质量、电网信息物理系统,jeli@whu.edu.cn
  27. 2726,武汉大学,国家网络安全学院,王志波,教授,NULL,博士,浙江大学,物联网、移动感知与计算、大数据、网络安全与隐私保护、人工智能安全,zbwang@whu.edu.cn
  28. 2827,武汉大学,国家网络安全学院,赵波,教授,NULL,博士,武汉大学,密码学应用、信息系统安全、可信计算、嵌入式系统及云计算安全、网络安全技术,zhaobo@whu.edu.cn
  29. 2928,中国科学技术大学,网络空间安全学院,吴曼青,教授/博导,院士,NULL,NULL,网络信息安全;大数据安全,qcmr@ustc.edu.cn
  30. 3029,中国科学技术大学,网络空间安全学院,郭光灿,教授/博导,院士,NULL,NULL,量子信息;量子光学;信息安全,gcguo@ustc.edu.cn

接着执行如下语句导入29位教师信息,其中实体表为People,包括属性id、name、school、college等。


   
  1. 1LOAD CSV WITH HEADERS  FROM  "file:///people.csv" AS line
  2. 2MERGE (p:People{id:line.id,name:line.name,school:line.school,
  3. 3    college:line.college,rank:line.rank,title:line.title,
  4. 4    degree:line.degree,graduation:line.graduation,
  5. 5    research:line.research,email:line.email})

接着通过 match(n) return n 查看节点,显示如下图所示,可以设置颜色及大小。

(2) 高校实体 people.csv

高校实体包括四个属性,序号、中文名称、英文名称和所属类别,读者可以结合实际情况自行增加。


   
  1. 1id,name,ename, type
  2. 2s1,北京大学,Peking University, 985
  3. 3s2,清华大学,Tsinghua University, 985
  4. 4s3,武汉大学,Wuhan University, 985
  5. 5s4,中国科学技术大学,University of Science and Technology of China, 985

执行命令如下:


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

此时增加了两类实体,选中某个实体还能查看其属性及属性值 。

(3) 高校群实体 china.csv

高校群实体主要想把高校划分为不同组织或圈子,比如985院校、211工程、双一流大学、C9高校等。建议读者结合自身需要进行设计更为合理的实体类别。


   
  1. 1id,name
  2. 2c1,中国 985高校
  3. 3c2,中国 211高校
  4. 4c3,中国双一流高校

执行命令如下:


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

(4) 称呼级别实体 title.csv

称呼级别实体是作者想查看院士、长江学者他们的圈子。后续建议读者将论文合作关系、基金课题合作关系、组织合作关系等加入。


   
  1. 1id,name
  2. 2t1,院士
  3. 3t2,长江学者

执行命令如下:


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

此时包含了四种类别的实体,如下图所示。

3.创建实体间关系

(1) 教师-高校关系 rel-ps.csv


   
  1. 1from_id, type,to_id
  2. 21,属于,s1
  3. 32,属于,s2
  4. 43,属于,s2
  5. 54,属于,s2
  6. 65,属于,s2
  7. 76,属于,s2
  8. 87,属于,s2
  9. 98,属于,s2
  10. 109,属于,s2
  11. 1110,属于,s3
  12. 1211,属于,s3
  13. 1312,属于,s3
  14. 1413,属于,s3
  15. 1514,属于,s3
  16. 1615,属于,s3
  17. 1716,属于,s3
  18. 1817,属于,s3
  19. 1918,属于,s3
  20. 2019,属于,s3
  21. 2120,属于,s3
  22. 2221,属于,s3
  23. 2322,属于,s3
  24. 2423,属于,s3
  25. 2524,属于,s3
  26. 2625,属于,s3
  27. 2726,属于,s3
  28. 2827,属于,s3
  29. 2928,属于,s4
  30. 3029,属于,s4

CQL代码如下,需要注意 from_id(关系起始) 和 to_id(关系介绍),包含的属性需要和CSV表格一致。


   
  1. 1LOAD CSV WITH HEADERS FROM  "file:///rel-ps.csv" AS line
  2. 2match (from:People{id:line.from_id}),(to:School{id:line.to_id})
  3. 3merge (from)-[r:属于{ type:line. type}]->(to)

(2) 学校-高校群关系 rel-sc.csv


   
  1. 1from_id, type,to_id
  2. 2s1,隶属,c1
  3. 3s2,隶属,c1
  4. 4s3,隶属,c1
  5. 5s4,隶属,c1

CQL导入关系代码如下:


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

(3) 教师-级别关系 rel-pt.csv


   
  1. 1from_id, type,to_id
  2. 22,是,t1
  3. 311,是,t1
  4. 428,是,t1
  5. 529,是,t1
  6. 64,是,t2

CQL导入关系代码如下:


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

此时的运行结果如下所示,包括:四所大学、院士、中国985高校、教师之间的关系。

4.获取实体关系的顶层概念关系

1call db.schema

显示结果如下图所示:

注意:如果在导入数据过程中出现错误,需要删除关系、节点,则使用下面代码。


   
  1. 1 // 删除节点及关系
  2. 2MATCH (n)-[r]-()
  3. 3DELETE n,r
  4. 4match(n)  return n
  5. 5
  6. 6 // 删除关系
  7. 7MATCH (n)-[r]-()
  8. 8DELETE r
  9. 9
  10. 10 // 单纯删除所以节点
  11. 11match (n)
  12. 12delete n

查询语句

1.节点信息查询

  • match指令查找匹配条件{name: “杨家海”}的节点信息,可以看到返回的节点及其属性。

1match (people {name: "杨家海"}) return people

  • 查询10个教师的姓名属性

1match (p: People) return p.name limit 10

  • 条件查询北京大学或清华大学教师的信息


   
  1. 1match (p: People)
  2. 2where p.school= "清华大学" or p.school= "北京大学"
  3. 3 return p.id, p.name, p.school

2.关系查询

  • 查找清华大学隶属的级别


   
  1. 1match (s: School {name:  "清华大学"})-[:隶属]->(People)
  2. 2 return s, People

  • 查找清华大学的所有教师。该指令匹配学校节点类型为“清华大学”的节点,然后匹配该节点属于关系,并且教师指向该大学的节点,返回结果如下所示。


   
  1. 1match (p)-[:属于]->(s: School {name:  "清华大学"})
  2. 2 return s, p

  • 查找某个老师隶属于哪个大学,School或s仅表示一个变量。


   
  1. 1match (p {name: "杨家海"})-[:属于]->(School)
  2. 2 return School.name
  3. 3
  4. 4match (p {name: "杨家海"})-[:属于]->(s)
  5. 5 return s.name

  • 查找与“杨家海”老师同一个学校的老师

该指令匹配节点类型为People,属性为{name: “杨家海”}的节点,接着通过 [:属于] 关系指向的节点m,并同时匹配某个节点coPeople也通过关系 [:属于] 指向节点m,然后返回匹配节点m的name和school属性,输出结果如下图所示。


   
  1. 1match (p: People {name:  "杨家海"})-[:属于]->(m)<-[:属于]-(coPeople)
  2. 2 return coPeople.name, coPeople.school


  • 查找与中国科学技术大学相关的教师

匹配节点类型为People的节点,然后匹配节点类型为School、节点属性为 {name: “中国科学技术大学”} 的节点,最后匹配他们两者之间存在的关系,将教师、关系类型和关系同时返回。


   
  1. 1match(p:People)-[relateTo]-(s:School {name:  "中国科学技术大学"})
  2. 2 return p.name,  type(relateTo), relateTo, s.name

3.查询关系路径

  • 查找与“杨家海”老师存在3条及以内关系的老师和学校


   
  1. 1match (p:People {name: "杨家海"})-[* 1. .3]-(s)
  2. 2 return distinct s

  • 查找老师“杨家海”和“王骞”之间的最短关系路径

下图有效展示了“杨家海”老师属于清华大学,二“王骞”老师属于武汉大学,他们均是985高校关联在一起。


   
  1. 1match p=shortestPath(
  2. 2    (b:People {name: "杨家海"})-[*]-(m:People {name: "王骞"})
  3. 3)
  4. 4 return p


4.好友推荐

  • 查找没有与“杨家海”老师合作过的老师

    查找与“杨家海”老师没有合作,但是杨老师的合作伙伴曾经有或者或关系的老师,实现推荐。

  • 寻找的是cocoPeople 其中coPeople是中间人,“院士”。该题目寻找“院士”人物推荐给“杨家海”老师,其中关联是“”老师,他是清华大学的院士,出现次数排序。


   
  1. 1match (p:People {name: "杨家海"})-[:属于]->(m)<-[:属于]-(coPeople),
  2. 2    (coPeople)-[:是]->(m2)<-[:是]-(cocoPeople)
  3. 3where not (p)-[:属于]->(m2)
  4. 4 return cocoPeople.name as Recommended, count(*) as  len
  5. 5order by  len desc

  • 找人介绍清华大学的“杨家海”老师给武汉大学的“窦贤康”院士认识


   
  1. 1match (p:People {name: "杨家海"})-[:属于]->(m)<-[:属于]-(coPeople), 
  2. 2    (coPeople)-[:是]->(m2)<-[:是]-(c: People {name: "窦贤康"})
  3. 3 return p, m, coPeople, m2, c

由图可知:这个图是查找“杨家海”老师通过院士“吴建平”院士认识窦院士。

PS:后面如果做贵州旅游知识图谱,比如说去镇远,就能推荐黔东南景区或者贵州排名高的景区或全国古镇景区给游客。

原文链接:

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

【End】

有奖调查   「中国远程办公调查问卷」来啦!长按图片参与???? 有奖调查,填完问卷,查看问卷末尾抽奖页面的进群规则,即可加入交流群‼️(注:进群后才产生中奖者)

???? 我们准备了 10 本 CSDN 精选的技术书籍等你来拿!每天第 6 名第 8 名入群者即为中奖者(中奖后会有小助手私聊),快长按图片填写问卷吧!

推荐阅读 

华为发布近2万元折叠屏手机Mate Xs;iPhone 12或支持WiFi新标;Electron 6.1.8发布 | 极客头条

AI 口罩督查官诞生,识别率高达 85%!

AI口罩“督查官”诞生记

一个学渣的 CTO 逆袭之路

面试还搞不懂Redis,快看看这40道面试题!| 博文精选

远程办公是一阵“过渡风”还是会“继续燃烧”?

你点的每一个在看,我认真当成了喜欢

猛戳“阅读原文”,参与调查!


转载:https://blog.csdn.net/csdnnews/article/details/104509517
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场