Python工具箱系列(三十一)

2025-12-13 0 805

Neo4j是一个高性能的开源的,使用Java语言实现的NoSQL图数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。现实中很多数据都是用图来表达的,比如社交网络中人与人的关系、地图数据、或是基因信息等等。RDBMS并不适合表达这类数据,而且由于海量数据的存在,让其显得捉襟见肘。NoSQL数据库的兴起,很好地解决了海量数据的存放问题,图数据库也是NoSQL的一个分支,相比于NoSQL中的其他分支,它很适合用来原生表达图结构的数据。图数据库存储的结构就如同计算机科学中的数据结构中所论述的图,由顶点和边组成。

Neo4j适用于图形一类数据,例如:社会关系,公共交通网络,地图及网络拓扑。Neo4j并为此专门进行了算法优化,也开发了相关的查询语言。这是Neo4j与其他NoSQL数据库的最显著区别。Neo4j不适用于:

◆记录大量基于事件的数据(例如日志条目或传感器数据)

◆对大规模分布式数据进行处理,类似于Hadoop

◆二进制数据存储

◆适合于保存在关系型数据库中的结构化数据

Neo4j提供了免费的社区版本,在数据量不大的情况下,可以用于开发。大规模部署与应用建议购买企业版。在ubuntu bionic下的安装过程如下所示:

 wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add -
echo \'deb https://debian.neo4j.com stable latest\' | sudo tee /etc/apt/sources.list.d/neo4j.list
sudo apt-get update

# 安装社区版本
sudo apt-get install -y neo4j

# 安装企业版本
sudo apt-get install -y neo4j-enterprise

systemctl status neo4j
systemctl start neo4j
systemctl enable neo4j

# 直接在本地检测是否安装成功
curl http://localhost:7474/

同样的,缺省情况下是只接受本地访问要求,可以编辑/etc/neo4j/neo4j.conf文件增加\”dbms.default_listen_address=0.0.0.0\”这一行,随后重新启动服务即可远程访问:

sed -i \'$adbms.default_listen_address=0.0.0.0\' /etc/neo4j/neo4j.conf
systemctl restart neo4j

以上使用sed命令增加了绑定地址,随后使用主流的浏览器(Edge,firefox,chrome)就可以访问数据库,如下图所示:

Python工具箱系列(三十一)

第一次访问时的缺省用户名与口令均是Neo4j,登录后需要修改。随后就进入到工作界面如下:

Python工具箱系列(三十一)

也可以使用传统的数据库客户端如DBeaver来访问Neo4j数据库。此时的连接属性设置如下图所示:

Python工具箱系列(三十一)

与SQL类似,Neo4j推出了专用于图的声明性文本查询语言Cypher。Cypher包含语句、关键词和表达式,比如谓词、函数等,其中很多大家都很熟悉(如WHERE,ORDER BY,SKIP LIMIT,AND,p.unitPrice > 10)。与SQL不同,Cypher完全是表达图模式的。添加了一个特殊子句MATCH来匹配数据中的这些模式。使用圆括号表示节点实体的圆,比如:(p:Product)。而关系的箭头使用–>来表达。Cypher语言在其它方面的重点是图概念,例如路径、可变长度路径、最短路径函数;列表上许多功能,操作和谓词的支持以及链接查询的功能。使用Cypher可以更新图结构和数据,甚至导入大量的CSV数据。通过用户定义的过程能够扩展语言。通过openCypher项目,Cypher已经成为一种现代图查询语言的开放标准,并且得到了多家数据库公司的支持。其语法可以参考[语法卡](neo4j.com/docs/cypher-r)。

可以通过多种方式来访问Neo4j数据库:

◆ 使用命令行工具如Cypher shell等

◆使用主流的浏览器访问,Neo4j称为Neo4j browser

◆其它第三方工具软件

模仿movie graph,我们建立一个中文的图数据库。相关创建内容如下:

CREATE (Jiangshuying:Person {name:\'江疏影\', born:1986})
CREATE (胡哥:Person {name:\'胡哥\', born:1982})
CREATE (Jindong:Person {name:\'靳东\', born:1976})
CREATE (万莤:Person {name:\'万莤\', born:1982})
CREATE (Gentlemen:Teleplay {title:\"恋爱先生\", released:2017})
CREATE (NothingButThirty:Teleplay {title:\'三十而已\', released:2020})
CREATE (外科风云:Teleplay {title:\'外科风云\', released:2017})
CREATE (伪装者:Teleplay {title:\'伪装者\', released:2015})
CREATE (好先生:Teleplay {title:\'好先生\', released:2016})
CREATE (县委大院:Teleplay {title:\'县委大院\', released:2022})
CREATE (Jiangshuying)-[:ACTED_IN {roles:[\'江莱\']}]->(好先生)
CREATE (Jiangshuying)-[:ACTED_IN {roles:[\'罗钥\']}]->(Gentlemen)
CREATE (Jiangshuying)-[:ACTED_IN {roles:[\'王漫妮\']}]->(NothingButThirty)
CREATE (Jindong)-[:ACTED_IN {roles:[\'庄恕\']}]->(外科风云)
CREATE (Jindong)-[:ACTED_IN {roles:[\'明楼\']}]->(伪装者)
CREATE (Jindong)-[:ACTED_IN {roles:[\'Boss\']}]->(Gentlemen)
CREATE (胡哥)-[:ACTED_IN {roles:[\'明台\']}]->(伪装者)
CREATE (胡哥)-[:ACTED_IN {roles:[\'梅晓哥\']}]->(县委大院)
CREATE (万莤)-[:ACTED_IN {roles:[\'徐丽\']}]->(好先生)

此时形成的知识图谱如下所示:

Python工具箱系列(三十一)

由此可见Neo4j对中文的支持非常好,可以混合用中英文来建立自己的知识图谱。下面的代码显示了,寻找万莤与胡哥间相互认识的最短路径。

match p=shortestpath((:Person {name:\'江疏影\'})-[*]-(:Person {name:\'胡哥\'})) return p

查询结果如下图所示:

Python工具箱系列(三十一)

当然这只是一个示例,因为并没有真正梳理每个人的关系,仅仅是从现有的知识中计算出来的。对于知识图谱来说,信息越充分,威力越巨大。

需要注意的是,以上命令必须一次性输入执行完成,否则就会出现看起来是一样的节点,但Neo4j会认为是不同的对象,从而形成意料之外的节点与关系。

Python操作知识图谱

安装了Py2neo就可以使用Python操作Neo4j了。我们也就可以在线处理大规模的数据,实现知识图谱的自动构建了。安装方法非常简单,直接在cmd中输入下列命令即可:

pip install py2neo

以下代码创建了一个极简的知识图谱,如下图所示:

Python工具箱系列(三十一)

示例代码如下所示:

from py2neo import Node, Relationship, Graph, NodeMatcher, RelationshipMatcher

# 远端NEO4J服务器
test_graph = Graph(\'http://172.20.103.169:7474\',auth=(\'neo4j\',\'88488848\'))

A = Node(\"员工\", name=\"张三\", PID = 100)
B = Node(\"员工\", name=\"李四\", PID = 100)
C = Node(\"公司\", name=\"西安衍舆\", CID = 99)
test_graph.create(A)
test_graph.create(B)
test_graph.create(C)
test_graph.create(Relationship(A, \"工作于\", C))
test_graph.create(Relationship(B, \"工作于\", C))

print(test_graph.nodes.match(\'员工\').all())

从图中可以看出,Neo4j对于中文的支持是非常好的。能够以非常符合中文习惯的方式写出相关知识。真正能够实用的知识图谱必须是日积月累的过程,有了称手的工具后,知识本身的正确性才是重点。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 Python工具箱系列(三十一) https://www.zuozi.net/36258.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务