[知识图谱]利用py2neo从Neo4j数据库获取数据
# -*- coding: utf-8 -*- from py2neo import Graph
import json
import re class Neo4jToJson(object):
"""知识图谱数据接口""" def __init__(self):
"""初始化数据"""
# 与neo4j服务器建立连接
self.graph = Graph("http://IP//:7474", username="neo4j", password="xxxxx")
self.links = []
self.nodes = [] def post(self):
"""与前端交互"""
# 前端传过来的数据
select_name = '南京审计大学'
# 取出所有节点数据
nodes_data_all = self.graph.run("MATCH (n) RETURN n").data()
# node名存储
nodes_list = []
for node in nodes_data_all:
nodes_list.append(node['n']['name'])
# 根据前端的数据,判断搜索的关键字是否在nodes_list中存在,如果存在返回相应数据,否则返回全部数据
if select_name in nodes_list:
# 获取知识图谱中相关节点数据
nodes_data = self.graph.run("MATCH (n)--(b) where n.name='" + select_name + "' return n,b").data()
links_data = self.graph.run("MATCH (n)-[r]-(b) where n.name='" + select_name + "' return r").data()
self.get_select_nodes(nodes_data)
else:
# 获取知识图谱中所有节点数据
links_data = self.graph.run("MATCH ()-[r]->() RETURN r").data()
nodes_data = self.graph.run("MATCH (n) RETURN n").data()
self.get_all_nodes(nodes_data) self.get_links(links_data) # 数据格式转换
neo4j_data = {'links': self.links, 'nodes': self.nodes}
neo4j_data_json = json.dumps(neo4j_data, ensure_ascii=False).replace(u'\xa0', u'')
return neo4j_data_json def get_links(self, links_data):
"""知识图谱关系数据获取"""
links_data_str = str(links_data)
links = []
i = 1
dict = {}
# 正则匹配
links_str = re.sub("[\!\%\[\]\,\。\{\}\-\:\'\(\)\>]", " ", links_data_str).split(' ')
for link in links_str:
if len(link) > 1:
if i == 1:
dict['source'] = link
elif i == 2:
dict['name'] = link
elif i == 3:
dict['target'] = link
self.links.append(dict)
dict = {}
i = 0
i += 1
return self.links def get_select_nodes(self, nodes_data):
"""获取知识图谱中所选择的节点数据"""
dict_node = {}
for node in nodes_data:
name = node['n']['name']
tag = node['n']['tag']
dict_node['name'] = name
dict_node['tag'] = tag
self.nodes.append(dict_node)
dict_node = {}
break
for node in nodes_data:
name = node['b']['name']
tag = node['b']['tag']
dict_node['name'] = name
dict_node['tag'] = tag
self.nodes.append(dict_node)
dict_node = {} def get_all_nodes(self, nodes_data):
"""获取知识图谱中所有节点数据"""
dict_node = {}
for node in nodes_data:
name = node['n']['name']
tag = node['n']['tag']
dict_node['name'] = name
dict_node['tag'] = tag
self.nodes.append(dict_node)
dict_node = {}
return self.nodes if __name__ == '__main__':
data_neo4j = Neo4jToJson()
print(data_neo4j.post())
[知识图谱]利用py2neo从Neo4j数据库获取数据的更多相关文章
- 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图
如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?
- easyui-datagrid通过action从数据库获取数据的关键代码
实际上是结合struts2来从数据获取json格式的数据. 关键代码: GetUserAction.java代码 package com.log.control; import java.io ...
- AngularJs从数据库获取数据并显示
哈哈,昨天下午和今天早上,花上一些时间,学习AngularJs,仅是粗略预览一下.很好,非常好. 由于手上有开发ASP.NET MVC环境,就在这测试下,去数据库获取数据并显示数据. 数据库表创建,添 ...
- Loadrunner脚本优化-参数化之关联MySQL数据库获取数据
脚本优化-参数化之关联MySQL数据库获取数据 by:授客 QQ:1033553122 测试环境: Loadrunner 11 Win7 64位 实操: 1. 安装MySQL ODBC驱动程序 O ...
- Python使用Flask框架,结合Highchart处理csv数据(引申-从文件获取数据--从数据库获取数据)
参考链接:https://www.highcharts.com.cn/docs/process-text-data-file 1.javascript代码 var options = { chart: ...
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- 在java项目中怎样利用Dom4j解析XML文件获取数据
在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进 ...
- 动态从数据库获取数据,省市县三级联动,有校验,导出Excel模板
话不多说,看效果图,直接上代码. sheet 商户表 hideSheet ,功能完成后隐藏的Sheet,用于储存下拉框中的信息,(以一定的规则将所需数据存储在表格中). 下面是代码 部分数据需要在导 ...
- MySql利用mysqldump导出/导入数据库表数据
备份 在源主机上,先使用mysqldump命令备份,导出sql脚本文件 mysqldump -uroot -p tel_dev > /opt/tel_dev.sql 也可指定编码 mysqldu ...
随机推荐
- 彻底理解CORS跨域原理
背景 现在的前端开发中都是前后端分离的开发模式,数据的获取并非同源,所以跨域的问题在我们日常开发中特别常见.其实这种资料网上也是一搜一大堆,但是都不够全面,理解起来也不够透彻.这篇文章就结合具体的示例 ...
- Redis持久化的方式有哪些?优缺点分别是什么?
Redis持久化方式 持久化的目的主要是做灾难恢复,数据恢复.由于Redis的数据全都放在内存里面,如果Redis挂了,没有配置持久化的话,重启的时候数据会全部丢失. 突 ...
- 从 JVM 视角看看 Java 守护线程
Java 多线程系列第 7 篇. 这篇我们来讲讲线程的另一个特性:守护线程 or 用户线程? 我们先来看看 Thread.setDaemon() 方法的注释,如下所示. Marks this thre ...
- C++学习笔记-预备知识
1.1 C++简介 C++融合3种不同的编程方式:C语言代表的过程性语言.C++在C语言基础上添加的类代表的面向对象语言.C++模板支持的广泛编程. 1.2 C++简史 1.2.1 C语言 Ritch ...
- Python 3.8.0 正式版发布,新特性初体验
北京时间 10 月 15 日,Python 官方发布了 3.8.0 正式版,该版本较 3.7 版本再次带来了多个非常实用的新特性. 赋值表达式 PEP 572: Assignment Expressi ...
- 用深度学习做命名实体识别(七)-CRF介绍
还记得之前介绍过的命名实体识别系列文章吗,可以从句子中提取出人名.地址.公司等实体字段,当时只是简单提到了BERT+CRF模型,BERT已经在上一篇文章中介绍过了,本文将对CRF做一个基本的介绍.本文 ...
- 洛谷 P3745 [六省联考2017]期末考试
题目描述 有 nnn 位同学,每位同学都参加了全部的 mmm 门课程的期末考试,都在焦急的等待成绩的公布. 第 iii 位同学希望在第 tit_iti 天或之前得知所有课程的成绩.如果在第 tit_ ...
- Airport Express UVA - 11374
In a small city called Iokh, a train service, Airport-Express, takes residents to the airport more q ...
- Error response from daemon: Get https://registry-1.docker.io/v2/library/nginx/manifests/1.14-alpine: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fnginx%3Apull&service=registry.docker.
docker pull 镜像时报错: Error response from daemon: Get https://registry-1.docker.io/v2/library/nginx/man ...
- 树莓派(4B)Linux + .Net Core嵌入式-HelloWorld(二)
一.新建.Net Core项目 新建.Net Core3.0的控制台应用,代码如下 namespace Demo { class Program { static void Main(string[] ...