利用图数据库neo4j搭建娱乐圈知识图谱

发布时间:2024-12-17 15:39

去年笔者分享了一篇来自微软研究院AI头条的文章 如何构建多快好省的“知识图谱即服务”?有兴趣的朋友可以去回顾下。这次笔者将利用图数据库neo4j
来搭建一个娱乐圈艺人关系的知识图谱。

neo4j介绍

neo4j是Neo4j公司开发的图形数据库管理系统,官方将其描述为具有原始图形存储和处理功能的ACID兼容事务数据库,根据DB-Engines排名,neo4j是最受欢迎的图形数据库。neo4j通过GPL v3开源许可提供了“社区版”,与此同时它还提供商业版支持。neo4j基于java实现,其他语言可通过http接口或二进制bolt协议来调用cypher查询语言来操作数据库。

在neo4j里,图的基本构成是节点(node)和关系(relationship), 节点之间通过关系接连,关系是个矢量。节点和关系,都可包含属性,属性有属性名和属性值,是一个key/value结构。

基本操作

1.创建Person实体, 包含name和title属性

CREATE (n:Person { name: 'tony', title: 'developer' }) return n;

CREATE (n:Person { name: 'andy', title: 'designer' }) return n;

2.创建两个Person实体的关系

match(n:Person{name:'andy'}),(m:Person{name:'tony'}) create (n)-[r:Friend]->(m) return r;

match(n:Person{name:'andy'}),(m:Person{name:'tony'}) create (n)<-[r:Friend]-(m) return r;

3.查看数据

match(n) return n;

接下来我们进入本文正题。

数据准备

本次构建知识图谱的数据来源于这个网站 娱乐圈[1],为了大家的安全,就不展示怎么写爬虫了:D。

省略若干过程,总之,笔者从上述网站,拿到了艺人数据,整理成了两个csv文件。其中一个文件命名为star_nodes.csv
, 其内容格式如下:

name,id
周杰伦,1
周笔畅,2

复制

第一列name表示艺人名字,第二列id便是艺人编号。

另一个文件名为star_relations.csv
,其内容格式如下:

subject,from_id,relation,object,to_id
李玥,2292,姐弟,秦俊杰,5933
胡静,2379,同学,刘烨,2347

复制

第一列subject表示主, 第二列from_id表示主的编号,第三列object表示宾,第四列to_id表示宾的编号。以胡静,2379,同学,刘烨,2347
为例,表示胡静(编号2379)是刘烨(编号2347)的同学。

构建艺人关系图谱

将上述两个csv文件放到neo4j目录下的import
子目录下,执行数据加载命令:

LOAD CSV WITH HEADERS FROM 'file:///star_nodes.csv' AS data CREATE (:star{starname:data.name, starid:data.id});

LOAD CSV WITH HEADERS FROM "file:///star_relations.csv" AS relations MATCH (entity1:star{starname:relations.subject}) , (entity2:star{starname:relations.object}) CREATE (entity1)-[:rel{relation: relations.relation}]->(entity2);

则完成了节点和关系的导入(本实验导入了9039个艺人,3432条关系)。

之后,我们可以执行各种查询了。

查询

1.查看某艺人的全部关系

return (:star{starname:"成龙"})-->();

        可见成龙大哥在圈内关系”错综复杂“。

2.查看某艺人的朋友(5层关系)

match p=(n:star{starname:"张国荣"})-[*..5]->() return p limit 50;

        可见张国荣在娱乐圈的人缘可谓不错。

3.查询某种特定关系

match p=()-[:rel{relation:"夫妻"}]->() return p LIMIT 10;

        图中展示的艺人夫妻,以及多对夫妻之间的关系。

4.查询某两个艺人之间最短的路径

match p=shortestpath((:star{starname:"张国荣"})-[*..5]->(:star{starname:"张卫健"})) return p;

        从图中可以看出来,张国荣是张卫健的好友(许志安)的师傅(梅艳芳)的密友;反过来也可以说张卫健是张国荣的密友(梅艳芳)的徒弟(许志安)的好友。这个结果也符合六度关系理论。

        延伸:六度关系理论由美国社会心理学家斯坦利·米尔格兰姆(Stanley Milgram)于1967年最先提出。通俗地说,你和世界上任何人之间所间隔的关系不会超过六度,也就是说最多通过六个人你就能够认识任何一个陌生人。

References

[1]
 娱乐圈: http://www.ylq.com/

网址:利用图数据库neo4j搭建娱乐圈知识图谱 http://c.mxgxt.com/news/view/256571

相关内容

Neo4j实战应用构建明星关系图谱
知识图谱
关于neo4j图数据库笔记四
水滴上线CONF医疗知识图谱,构建健康保障数据中台
知识图谱概述
react前端关系图谱实现
知识图谱软件
星环知识图谱平台
什么是关联图谱?
娱乐圈明星关系图谱深度剖析

随便看看