一文带你使用neo4j生成三国人物社交关系图
  aRwZkEcXYmJs 2023年11月02日 58 0

简介

   最近给孩子买了三国演义,可是三国人物关系太复杂,就想着把三国人物关系做成一张图,这样方便看,整好neo4j图数据库非常适合社交关系的处理,下面就一起来看看,如何使用neo4j生成三国人物社交关系图。


neo4j安装

现在docker很流行,也很方便,在这里,我就用docker快速搭建一个neo4j图数据库服务。


拉取neo4j镜像

[root@mysql ~]#docker pull neo4j
[root@mysql ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
neo4j latest ce22583052bf 6 days ago 546MB


创建neo4j的docker容器

[root@mysql ~]
[root@mysql ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc33fcdae7f4 neo4j "/sbin/tini -g -- /d鈥 4 hours ago Up 4 hours 0.0.0.0:7474->7474/tcp, 7473/tcp, 0.0.0.0:7687->7687/tcp hopeful_roentgen

到这里,图数据库的服务已经搭建好了,剩下的就是将数据导入。


准备三国人物数据

在这里,我已经准备好了三国演义中蜀国主要人物的关系表,将这些数据库拷贝到linux系统的a.txt文件

刘备      关羽      结义兄弟
刘备 张飞 结义兄弟
刘备 卢植 主公
刘备 马超 主公
刘备 庞统 主公
刘备 黄忠 主公
刘备 赵云 主公
刘备 魏延 主公
刘备 蒋琬 主公
刘备 法正 主公
刘备 马良 主公
刘备 孟获 主公
刘备 啥摩柯 主公
刘备 糜竺 主公
刘备 糜芳 主公
甘夫人 刘备 妻
糜夫人 刘备 次妻
孙尚香 刘备 妻
关羽 关兴 父子
关平 关羽 义子
张飞 张苞 父子
马腾 马超 父子
马腾 韩遂 异性兄弟
庞德 庞统 叔父
马谡 马良 弟弟
祝融 孟获 妻
糜芳 糜夫人 兄妹
糜竺 糜芳 兄弟
刘备 诸葛亮 主公
黄月英 诸葛亮 妻
黄承彦 黄月英 父女
姜维 诸葛亮 弟子
诸葛亮 诸葛瑾 兄弟
诸葛亮 诸葛瞻 父子
刘备 刘禅 父子
甘夫人 刘禅 母子
刘禅 姜维 主公
诸葛瞻 刘禅 女婿
刘备 中山王:刘胜 后代
刘胜 刘启 父子
刘启 刘辩 宗亲
刘辩 刘协 让位


使用awk获取不重复的人物名称


cat a.txt |awk '{print $1"\n"$2}'|sort|uniq > b.sql

生成neo4j图数据节点插入语句
[root@mysql ~]
create (country:shu { name:'法正'});
create (country:shu { name:'甘夫人'});
create (country:shu { name:'关平'});
create (country:shu { name:'关兴'});
create (country:shu { name:'关羽'});
create (country:shu { name:'韩遂'});
create (country:shu { name:'黄承彦'});
create (country:shu { name:'黄月英'});
create (country:shu { name:'黄忠'});
create (country:shu { name:'姜维'});
create (country:shu { name:'蒋琬'});
create (country:shu { name:'刘备'});
create (country:shu { name:'刘辩'});
create (country:shu { name:'刘禅'});
create (country:shu { name:'刘启'});
create (country:shu { name:'刘胜'});
create (country:shu { name:'刘协'});
create (country:shu { name:'卢植'});
create (country:shu { name:'马超'});
create (country:shu { name:'马良'});
create (country:shu { name:'马谡'});
create (country:shu { name:'马腾'});
create (country:shu { name:'孟获'});
create (country:shu { name:'糜芳'});
create (country:shu { name:'糜夫人'});
create (country:shu { name:'糜竺'});
create (country:shu { name:'庞德'});
create (country:shu { name:'庞统'});
create (country:shu { name:'啥摩柯'});
create (country:shu { name:'孙尚香'});
create (country:shu { name:'魏延'});
create (country:shu { name:'张苞'});
create (country:shu { name:'张飞'});
create (country:shu { name:'赵云'});
create (country:shu { name:'诸葛瑾'});
create (country:shu { name:'诸葛亮'});
create (country:shu { name:'诸葛瞻'});
create (country:shu { name:'祝融'});
 
    
生成neo4j图数据人物关系语句
[root@mysql ~]# cat a.txt |awk '{print "match (p1:shu {name:'\''"$1"'\''}),(p2:shu{name:'\''"$2"'\''}) create (p1)- [r:rel {relation:'\''"$3"'\''}]->(p2);"}'
match (p1:shu {name:'刘备'}),(p2:shu{name:'关羽'}) create (p1)- [r:rel {relation:'结义兄弟'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'张飞'}) create (p1)- [r:rel {relation:'结义兄弟'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'卢植'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'马超'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'庞统'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'黄忠'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'赵云'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'魏延'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'蒋琬'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'法正'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'马良'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'孟获'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'啥摩柯'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'糜竺'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'糜芳'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'甘夫人'}),(p2:shu{name:'刘备'}) create (p1)- [r:rel {relation:'妻'}]->(p2);
match (p1:shu {name:'糜夫人'}),(p2:shu{name:'刘备'}) create (p1)- [r:rel {relation:'次妻'}]->(p2);
match (p1:shu {name:'孙尚香'}),(p2:shu{name:'刘备'}) create (p1)- [r:rel {relation:'妻'}]->(p2);
match (p1:shu {name:'关羽'}),(p2:shu{name:'关兴'}) create (p1)- [r:rel {relation:'父子'}]->(p2);
match (p1:shu {name:'关平'}),(p2:shu{name:'关羽'}) create (p1)- [r:rel {relation:'义子'}]->(p2);
match (p1:shu {name:'张飞'}),(p2:shu{name:'张苞'}) create (p1)- [r:rel {relation:'父子'}]->(p2);
match (p1:shu {name:'马腾'}),(p2:shu{name:'马超'}) create (p1)- [r:rel {relation:'父子'}]->(p2);
match (p1:shu {name:'马腾'}),(p2:shu{name:'韩遂'}) create (p1)- [r:rel {relation:'异性兄弟'}]->(p2);
match (p1:shu {name:'庞德'}),(p2:shu{name:'庞统'}) create (p1)- [r:rel {relation:'叔父'}]->(p2);
match (p1:shu {name:'马谡'}),(p2:shu{name:'马良'}) create (p1)- [r:rel {relation:'弟弟'}]->(p2);
match (p1:shu {name:'祝融'}),(p2:shu{name:'孟获'}) create (p1)- [r:rel {relation:'妻'}]->(p2);
match (p1:shu {name:'糜芳'}),(p2:shu{name:'糜夫人'}) create (p1)- [r:rel {relation:'兄妹'}]->(p2);
match (p1:shu {name:'糜竺'}),(p2:shu{name:'糜芳'}) create (p1)- [r:rel {relation:'兄弟'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'诸葛亮'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'黄月英'}),(p2:shu{name:'诸葛亮'}) create (p1)- [r:rel {relation:'妻'}]->(p2);
match (p1:shu {name:'黄承彦'}),(p2:shu{name:'黄月英'}) create (p1)- [r:rel {relation:'父女'}]->(p2);
match (p1:shu {name:'姜维'}),(p2:shu{name:'诸葛亮'}) create (p1)- [r:rel {relation:'弟子'}]->(p2);
match (p1:shu {name:'诸葛亮'}),(p2:shu{name:'诸葛瑾'}) create (p1)- [r:rel {relation:'兄弟'}]->(p2);
match (p1:shu {name:'诸葛亮'}),(p2:shu{name:'诸葛瞻'}) create (p1)- [r:rel {relation:'父子'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'刘禅'}) create (p1)- [r:rel {relation:'父子'}]->(p2);
match (p1:shu {name:'甘夫人'}),(p2:shu{name:'刘禅'}) create (p1)- [r:rel {relation:'母子'}]->(p2);
match (p1:shu {name:'刘禅'}),(p2:shu{name:'姜维'}) create (p1)- [r:rel {relation:'主公'}]->(p2);
match (p1:shu {name:'诸葛瞻'}),(p2:shu{name:'刘禅'}) create (p1)- [r:rel {relation:'女婿'}]->(p2);
match (p1:shu {name:'刘备'}),(p2:shu{name:'刘胜'}) create (p1)- [r:rel {relation:'后代'}]->(p2);
match (p1:shu {name:'刘胜'}),(p2:shu{name:'刘启'}) create (p1)- [r:rel {relation:'父子'}]->(p2);
match (p1:shu {name:'刘启'}),(p2:shu{name:'刘辩'}) create (p1)- [r:rel {relation:'宗亲'}]->(p2);
match (p1:shu {name:'刘辩'}),(p2:shu{name:'刘协'}) create (p1)- [r:rel {relation:'让位'}]->(p2);


执行插入语句

将上面生成的节点和关系语句在neo4j中执行,就可以了。然后查询,就可以看到效果图了
一文带你使用neo4j生成三国人物社交关系图_mysql

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  SR2ulORuJ6BY   2023年11月02日   100   0   0 mysql
  SR2ulORuJ6BY   2023年11月02日   94   0   0 mysql
  SR2ulORuJ6BY   2023年11月13日   28   0   0 mysql
  SR2ulORuJ6BY   2023年11月02日   116   0   0 mysql
  SR2ulORuJ6BY   2023年11月02日   55   0   0 mysql
  SR2ulORuJ6BY   2023年11月13日   23   0   0 mysql
  SR2ulORuJ6BY   2023年11月02日   95   0   0 mysql
  SR2ulORuJ6BY   2023年11月13日   27   0   0 mysql
  SR2ulORuJ6BY   2023年11月02日   128   0   0 mysql
  SR2ulORuJ6BY   2023年11月13日   26   0   0 mysql
  SR2ulORuJ6BY   2023年11月13日   31   0   0 mysql
aRwZkEcXYmJs