Python工具箱系列(三十一)

这篇具有很好参考价值的文章主要介绍了Python工具箱系列(三十一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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已经成为一种现代图查询语言的开放标准,并且得到了多家数据库公司的支持。其语法可以参考[语法卡](https://neo4j.com/docs/cypher-refcard/current/)。

可以通过多种方式来访问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对于中文的支持是非常好的。能够以非常符合中文习惯的方式写出相关知识。真正能够实用的知识图谱必须是日积月累的过程,有了称手的工具后,知识本身的正确性才是重点。文章来源地址https://www.toymoban.com/news/detail-438784.html

到了这里,关于Python工具箱系列(三十一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python工具箱系列(三十六)

    基于Docker的数据库开发环境 前文介绍了sqlite/mysql/mssql等数据库系统在ubuntu的安装与部署过程,相对是比较复杂的,需要耐心等待下载以及排除各种故障,对于开发人员来说是不太友好。在某些情况下,开发人员要测试在多个数据库环境下软件的正确性,需要部署多个数据库,

    2024年02月09日
    浏览(49)
  • Python工具箱系列(三十二)

    Elasticsearch是一个基于Lucene的搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful 的API接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是非常流行的企业级搜索引擎。官方支持的客户端语言包括Java、.NET(C#)、PHP、Python、Apa

    2024年02月05日
    浏览(52)
  • Python工具箱系列(三十四)

    SQLAlchemy是著名的ORM(Object Relational Mapping-对象关系映射)框架。其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。对许多语言(例如JAVA/PYTHON)来说就是定义一个对象,并且这个对象对应着一张数据库的表。而这个对象的实例,就对应着表中的一条记录。

    2024年02月06日
    浏览(52)
  • Python工具箱系列(四十一)

           前文的代码示例了使用gzip对单个文件进行压缩。本文示例使用更通用的zipfile来批量压缩文件。zipfile也是python内置的库,使用起来非常方便。废话不说,直接上代码示例。        上述示例代码中,再次引入一个python内置的轻量级数据库dbm。与shelve类似,也是key-val

    2024年02月11日
    浏览(52)
  • IDEA插件系列(4):GitToolBox插件——git工具箱

    GitToolBox 提供各种git操作。 第一种安装方式是使用IDEA下载安装 第二种安装方式是使用离线插件进行安装 插件下载地址:http://plugins.jetbrains.com/plugin/7499-gittoolbox 在这里进行配置 更多可参考文档 https://github.com/zielu/GitToolBox/wiki/Manual 作用:显示当前代码提交的用户名、时间、以

    2024年02月11日
    浏览(42)
  • HNU-离散数学-工具箱系列3-关系矩阵法求传递闭包

    用于解决这类问题: 举例一、  举例二、(求传递闭包)   代码如下:

    2024年02月11日
    浏览(50)
  • python实现视频抽帧,文件批量操作,文件批量处理(数据集制作的工具箱)

    环境准备 数据集制作 文件批量重命名 文件批量移动 将文件批量按照一定格式进行重命名 修改xml文件内容的方法 Pathlib库的常用接口 在计算机视觉项目中,文件批量操作和文件批量预处理是必不可少的步骤。它们涉及处理大量的图像文件,包括读取、处理、保存和预处理。

    2024年02月09日
    浏览(72)
  • PDF 工具箱

    PDF 工具箱 V9.0.0.1 程序:VB.net  运行库: NET Framework 4.5 下载:https://download.csdn.net/download/polloo2012/88399029 功能简介: 1、PDF文件多文件合并,可调整顺序。 2、PDF文件拆分,将每页拆分成独立的PDF文件。 3、PDF文件添加水印,文字或图片水印,图片水印可选择位置。 4、word/exce

    2024年02月09日
    浏览(48)
  • Matlab 优化工具箱

    语法:[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub,options) f、x、b、beq、lb 和 ub 是向量,A 和 Aeq 是矩阵。 示例1-1 : 语法:[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0,options) f、x、intcon、b、beq、lb 和 ub 是向量,A 和 Aeq 是矩阵。 语法:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub

    2024年02月02日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包