[知识图谱]利用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 ...
随机推荐
- Knative 实战:基于 Knative Serverless 技术实现天气服务-下篇
上一期我们介绍了如何基于 Knative Serverless 技术实现天气服务-上篇,首先我们先来回顾一下上篇介绍的内容: 通过高德天气 API 接口,每隔 3 个小时定时发送定时事件,将国内城市未 ...
- Android Studio 优秀插件: Parcelable Code Generator
这里假设我们已经会使用 Parcelable 序列化一个对象了~~ 那么大家会发现 Parcelable 使用起来有些复杂,因为我们要自己复写 几个方法,而且当类的属性比较多的时候,我们就会难受了,又 ...
- Flutter 错误捕获的正确姿势
背景 我们知道,在软件开发过程中,错误和异常总是在所难免. 不管是客户端的逻辑错误导致的,还是服务器的数据问题导致的,只要出现了异常,我们都需要一个机制来通知我们去处理. 在 APP 的开发过程中,我 ...
- python编程基础之二十六
偏函数:当一个函数有大量的参数时候,调用时候非常不方便,于是就可以用偏函数解决,将一些参数固定(默认值),达到简化函数调用的目的 使用偏函数需要导入functools import functools ...
- Cocos2d-x入门之旅[1]场景
在游戏开发过程中,你可能需要一个主菜单,几个关卡和一个END的界面,如何组织管理这些东西呢? 和其他游戏引擎类似,Cocos也使用了场景(Scene) 这个概念 试想象一部电影或是番剧,你不难发现它是 ...
- 信息传递 NOIP2015 day1 T2
题文: 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮 ...
- 树莓派(4B)Linux + .Net Core嵌入式-初始化环境(一)
一.树莓派简单介绍 二.软&件准备 硬件:树莓派4B主机.电源线.TF卡&TF读卡器.PC 软件:win32diskimager(用于烧系统到TF卡).Xshell或Windows T ...
- top命令之性能分析
top命令详解 当前时间20:27:12 当前系统运行时间3:18秒 1个用户 系统负载平均长度为0.00,0.00,0.00(分别为1分钟.5分钟.15分钟前到现在的平均值) 第二行为进程 ...
- 设置Linux支持中文
1.首先在command输入locale,可以看到Linux下默认的系统语言的是英文 2.vim ~/.bashrc打开这个文件,该文件夹相当于系统配置文件 3.打开后,将后三行命令输入到文档中,最后 ...
- PHP 插入排序 -- 希尔排序
1.希尔排序 -- Shell Insertion Sort 时间复杂度:数学家正在勤劳的探索! 适用条件: 直接插入排序的改进,主要针对移动次数的减少,这取决于"增量队列"的取值 ...