写在前面的话

想问大家一个有趣的问题,大家知道我们程序员圈的第一位女性开发者是谁吗?作为开发者,以前并没有认真去想过这个问题,这两天认真的看了一下百度百科查找了一下相关的专业知识。才知道历史上第一位女性程序员是:奥古斯塔·阿达·金,勒芙蕾丝伯爵夫人(1815年12月10日-1852年11月27日)(英文:Augusta Ada King, Countess of Lovelace),原名奥古斯塔·阿达·拜伦(Augusta Ada Byron),通称阿达·洛芙莱斯(Ada Lovelace),是著名英国诗人拜伦之女,数学家。计算机程序创始人,建立了循环和子程序概念。
为计算程序拟定“算法”,写作的第一份“程序设计流程图”,被珍视为“第一位给计算机写程序的人”。为了纪念阿达·奥古斯塔对现代电脑与软件工程所产生的重大影响,美国国防部将耗费巨资、历时近20年研制成功的高级程序语言命名为Ada语言,它被公认为是第四代计算机语言的主要代表。
言归正传,今天我们用技术去致敬这位女性开发者,向她学习科学严谨的研究精神。本文通过Graph来梳理人物的生平关系和重要人物,采用Neo4j来进行关系的存储和可视化。

一、相关信息的收集

本文的目标是通过图来构建埃达.洛夫莱斯的生平,他的重要人物关系,对计算机和相关行业的重要影响等等,我们尝试通过百科来查找相关的资料,下面跟着一起来吧。

1、搜集人物信息

首先我们先在百度百科中直接搜索中心人物的主要信息。在连接中埃达.洛夫莱斯,我们可以看到以下的信息。

在1842年,人称“数字女王”的阿达·洛芙莱斯(Ada Lovelace)编写了历史上首款电脑程序。在1834年,阿达的朋友——英国数学家、发明家兼机械工程师查尔斯·巴贝其(Charles Babbage)——发明了一台分析机;阿达则致力于为该分析机编写算法,并于1843 年公布了世界上第一套算法。巴贝其分析机后来被认为是最早期的计算机雏形,而阿达的算法则被认为是最早的计算机程序和软件。1852年,阿达为了治疗子宫颈癌,却因此死于失血过多,享年36岁。无独有偶,她与她父亲拜伦死于相同年龄,一样死于治疗中的失血过多。她留下了两个儿子与一位女儿—安妮·布兰特贵女。依她的遗言,阿达葬于诺丁汉哈克诺的圣 玛丽亚·抹大拉教堂,长眠在父亲的身旁。

通过以上的信息介绍,基本上已经形成了比较清晰的人物关系脉络。我们使用思维导图的方式来展示这些信息可以如下所示:

二、Neo4j图话人物

neo4j的知识这里暂时不展开(只是简单讲解),后面可以抽一些时间来专门的谈谈图数据库,已经图数据库的简单使用。今天主要讲讲如何把这些信息以图的形式表达和呈现,怎么把数据插入到图数据中,怎么进行实体关系的建立。

1、Neo4j都有啥

打开安装好的Neo4j的浏览器控制台桌面,您可以看到如下的页面:

在上图的页面中,我们可以看到,图数据库中有三个最重要的对象:Node、Relationship、Property。通过节点、关系、属性来构建一个图,图用于表达事务、人物这些对象的关联关系的话,具有非常直观和友好的特点,而反观关系型数据库,不仅存储麻烦,可能查询维护数据也是一件令人非常痛苦的事情。

比如我们打开一个电影的相关节点信息,就直观的看到这些信息。

切换到table模式下可以看到它的原始信息是这样的

2、文本到图对象映射

这里假设您对neo4j已经有了一些基本了解,对常规操作也略知一二,对于如何创建node,生成关系,这里不一一列出,不清楚的朋友可以参考CSDN的一些入门帖子进行学习。我们基于之前百科中查找的信息,将人物的关系和相关实体转换成Neo4j中的相关对象。具体的实体创建语句如下:

CREATE (TheMatrix:girlCoder {title:'第一位女程序员', released:1999, tagline:'图致敬关于历史上第一位女程序员'})CREATE (a:Person {name:'埃达.洛夫莱斯', born:1815,remark:'历史上第一位女程序员,数学家'})CREATE (b:Person {name:'迈克尔.法拉第', remark:'电学之父'})CREATE (c:Person {name:'玛丽.萨默维尔', remark:'19实际欧洲数学和科学界的杰出女性之一'})CREATE (d:Person {name:'乔治.戈登.拜伦', remark:'英国诗人、剧作家'})CREATE (e:Person {name:'安妮.安娜贝拉.拜伦', remark:'诗人拜伦的妻子'})CREATE (f:Person {name:'程序员'})CREATE (g:Person {name:'飞行学', remark:'12岁写的书'})CREATE (h:Person {name:'数学'})CREATE (i:Person {name:'子宫颈癌', remark:'病症'})CREATE (j:Person {name:'尤卡里机器'})CREATE (k:Person {name:'计算机硬件历史'})CREATE  (a)-[:朋友]->(b),  (a)-[:师从]->(c),  (a)-[:父女]->(d),  (a)-[:母女]->(e),  (a)-[:史上第一位]->(f),  (a)-[:出版物]->(g),  (a)-[:知名于]->(h),  (a)-[:亲历]->(i),  (a)-[:启发]->(j),  (a)-[:影响]->(k)

复制以上的语句,到neo4j的客户端执行机器上去运行,您可以在图数据库中进行查询看到以下结果。neo4j采用Match语句进行数据的查询,类似于select,执行完成后可以看到结果:

MATCH (n:Person{name:'埃达.洛夫莱斯'}) RETURN n

到这里,有朋友一定会说,只看到了中心任务,没有看到它的关系和关联的实体信息。应该怎么办呢?其实很简单,我们可以通过客户端的关系探索功能来实现自由探索。使用鼠标点击节点,在弹出的页面中点击图即可。

这样就完整的展示了以埃达.洛夫莱斯为中心的关系探索,以及关联关系的实体信息。你甚至可以基于关系实体进行再次探索(这里没有构建其它的关系,所以暂时无法探索)。

总结

以上就是本文的全部内容,本文以埃达.洛夫莱斯为出发点,通过百度百度采集相关人物的信息,创建思维导图,然后将思维导图和文本信息转换成graph,存放在neo4j图数据库库中,通过实例讲解怎么从文本到图对象的人工构建过程,在图领域,其实有很多自动识别文本提取到图谱的项目,有兴趣的朋友可以一起去探索。行文仓促,如有不当,请各位批评指正。最后,仅以此文致敬广大的女性开发者,祝各位工作顺利,开开心心。