这个网站里有很多通用知识图谱。尤其是网站整合的ownthikhttps://kg.ownthink.com/还可以进行可视化检索。
https://kg.ownthink.com/
那么我们是否可以将这个ownthik导入自己的Neo4j数据库呢?
Win7旗舰版
4CPU+8GB内存
i5-6500@3.2GHz
1TB机械硬盘
Neo4j社区版3.5.6
首先网站提供了下载,是一个大约800MB的压缩包,解压了有2.8GB左右。包括网站提供的其他图片数据,大多都以文本形式存储。
这么大的txt文件,必须要用一些工具才能打开,普通的txt游览器,包括notepad都是打不开的。
我使用了PilotEdit来打开。
打开预览
可以看到,都是一些文本三元组格式。
经过尝试,发现必须使用neo4j-admin import命令才能导入。LOAD CSV等都是不行的,import用时1h,LOAD CSV可能要500小时。而neo4j-admin需要一个实体csv(entity.csv),和一个关系csv(Relationship.csv)。
参考这个https://blog.csdn.net/paopaopotter/article/details/81779575
实体csv可以有2个,但我们只需要一个就够了。其中entity.csv的格式必须有:ID,name,:LABLE三个字段。而relationship.csv必须有:START_ID,name,:END_ID,:TYPE四个字段。如下:
entity.csv
relationship.csv
首先数据并不是标准的csv格式,csv格式使用逗号做分隔符,而这里使用的是\t。其次数据中有很多项是缺失的,这将导致导入失败。最后,txt中的三元组格式也不符合导入的要求。
如此大的文本,想要一次性加载入内存然后进行处理显然也不是正确的处理方式。如果以后面临200G的文本,难道也全加载入内存吗。在网上找到一些处理三元组为entity.csv和relationship.csv的python代码,但是代码是整个读入文件,然后使用map函数,我认为这样做不行,就没试了,不然等半天报一个Out of Memory就不好了。
首先一行一行的读入,把空值所在的行都删掉,写入一个新的CSV中,进行去空处理。然后编写脚本进行处理。
把左右实体都给他一个唯一的ID,如entity1、entity2....,并在CSV文件里写入对应关系就行了。如:
姚明 英文名 YaoMing
姚明 性别 男
姚明 民族 汉
周润发 职业 演员
周润发 出生地 中国香港
变为:
entity.csv
:ID,name,:LABLE
entity0,姚明,ENTITY
entity1,周润发,ENTITY
entity2,YaoMing,ENTITY1
entity3,男,ENTITY1
entity4,汉,ENTITY1
entity5,演员,ENTITY1
entity6,中国香港,ENTITY1
relationship.csv
:START_ID,name,:END_ID,:TYPE
entity0,英文名,entity2,RELATIONSHIP
entity0,性别,entity3,RELATIONSHIP
entity0,民族,entity4,RELATIONSHIP
entity1,职业,entity5,RELATIONSHIP
entity1,出生地,entity6,RELATIONSHIP
成功导入:
成功导入
可以看到耗时1个半小时(如果是SSD就好了),峰值内存使用了2GB不到。
其中实体数7100w(因为三元组两头都算做了实体,中间是关系。),关系数6000w。实际上就是说三元组最左边的主语有大约1000w,最右边的宾语有大约6000w,加起来7000w实体。
占用11GB硬盘空间。
占用磁盘及版本号
试着查询一下,采用模糊匹配:
match R = (n:ENTITY)-[r:REL]->(m:ENTITY1) where n.name=~'姚明.\*' return R limit 100
可以在1s内返回结果(实际使用需设置超时时间,避免搜索失败导致遍历整个数据库):
结果
最后可以使用一些开源展示的工具(TODO),就可以进行交互和展示了:
https://github.com/jexp/neo4j-3d-force-graph
图形展示
作者:base64_decode('UTc4MjQ2NDI5NQ==')
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。