欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【知识图谱】小白学习,neo4j的使用

程序员文章站 2022-06-12 17:12:51
...

学习目的:已有数据:xml中的论文作者信息,目的是,构建作者之间的关系。

(以下都是边学边写,给自己疏离用的,漏洞专业术语使用错误肯定非常多。)

首先知识图谱,就是构建一系列实体关系,类似于数据库。它囊括了一系列知识抽取、表达、构建、检索等技术,部分还需要一些有关数据挖掘的深度学习机器学习算法。但这里主要做的是,构建简单的三元组,并将其可视化。

1,安装。

使用教程https://www.cnblogs.com/ljhdo/archive/2017/05/19/5521577.html

安装后使用时,每一次都打开bin所在的文件夹,输入cmd,进入终端,输入命令行neo4j.bat console,然后就可以进入那个网址了。

2,撰写代码。

create(n:ability {name:"沟通"})
create(m:train {name:"培训"})
create(n)-[r0:has]->(a:method {name:"交流"})
create(n)-[r1:has]->(b:method {name:"会议"})
create(n)-[r2:has]->(c:method {name:"协作"})
create(n)-[r3:has]->(d:method {name:"汇报"})
create(m)-[r4:can {probability:0.6}]->(a)
create(m)-[r5:can {probability:0.6}]->(b)
create(m)-[r6:can {probability:0.2}]->(d)
return m,n,a,b,c,d,r0,r1,r2,r3,r4,r5,r6
————————————————

我看那些构建节点的代码貌似还挺简单的(都是学过数据库的人了),于是开始思考数据导入的方式。明显,我需要选择,自动地把xml中的作者信息传输到图形数据库中。以下是我学习到的几种方式。

(1) Cypher create 语句,为每一条数据写一个create

(2) Cypher load csv 语句,将数据转成CSV格式,通过LOAD CSV读取数据。

(3) 官方提供的neo4j-import工具,未来将被neo4j-adminimport代替

(4) 官方提供的Java API    BatchInserter

(5) 大牛编写的 batch-import 工具

(6) neo4j-apocload.csv +apoc.load.relationship

(7) 针对实际业务场景,定制化开发。

————————————————出处:https://mp.weixin.qq.com/s/ZYqDSx333nTCYBpHydfYMg

(1)算了算了。一条条写,还不写死我去。

(2)显然csv格式的数据是被写死的,于是我又搜索了一下,怎么将xml转成csv。

答案1:直接另存为里面选就好了。
用Excel打开目标文件,选择另存为.CSV文件格式,然后以记事本打开.csv文件,然后另存为时编码方式选择Unicode,再以.csv为后缀保存,再打开的时候就会显示真正的.CSV格式(以逗号为分割符)

答案2:1.存盘一个xml文件

2. 在Excel中打开CSV文件。在菜单或选项卡的“开发工具”的“XML”组中,单击“源”。
3. 单击” XML映射“ ,在出现的对话框中点击 “添加” ,选择上述新生成的XML文件。
4. 然后点击“ 确定” 即可,此时右侧显示出XML的层次结构。
5. 选中结构中的temp, 然后直接拖曳到CSV表格的第一行数据上即可。注意此时整个表格都被选中了。
6. 点 菜单或选项卡上的“开发工具” , “XML” ,“导出”。
然后就像保存文件一样保存即可。

然后我发现我原来的xml好像有点问题…,输出来的csv文件并不是按照作者来,一行一行的。罢了。先试试。

问题:如何向图形数据库中导入csv文件。

https://www.cnblogs.com/April1995/p/10531733.html(似乎是三个表之间建立了联系,暂时不用,先留着)

https://cloud.tencent.com/developer/article/1387710

https://www.w3cschool.cn/neo4j/neo4j_cql_create_node.html(cql语句学习大全。标记重点!!!)

USING PERIODIC COMMIT 10
LOAD CSV FROM "file:///test.csv" AS line
create (p:person{id:line[0],name:line[1],state:line[2]})
//我发现了一个十分智障的问题,create之后似乎不能跟着match,我的总报错。没道理,可能是因为我多次创建?可是多次创建也不报错啊。只要create后面跟了match就报错。
MATCH(m:person) return m

最后发现,我还是先处理一下我杂草一般的xml数据比较好。

 

另外,以我的尿性,估计玩一次,都要清空一次数据库,记住一下清空语句:match (n) detach delete n

 

匹配关系:

MATCH (father:person),(son:person) 
WHERE father.state = "father" AND son.state= "son" 
CREATE (father)-[r1:我是你爸爸{time:"forever"}]->(son) 
RETURN r1

MATCH (older:person),(smaller:person) 
WHERE older.state = "son" AND smaller.state= "son" 
CREATE (older)-[r:好兄弟{time:"天长地久"}]->(smaller) 
RETURN r