Commit 2b249c5a authored by haoyanbin's avatar haoyanbin

1

parent 0f897af2
...@@ -11,12 +11,11 @@ def create_app(test_config=None): ...@@ -11,12 +11,11 @@ def create_app(test_config=None):
DATABASE=os.path.join(app.instance_path, 'apps.sqlite'), DATABASE=os.path.join(app.instance_path, 'apps.sqlite'),
) )
from app.controller import search from app.controller import search,importdata,neodata,auth
from app.controller import importdata
from app.controller import auth
app.register_blueprint(auth.bp)
app.register_blueprint(importdata.bp)
app.register_blueprint(search.bp) app.register_blueprint(search.bp)
app.register_blueprint(importdata.bp)
app.register_blueprint(neodata.bp)
app.register_blueprint(auth.bp)
if test_config is None: if test_config is None:
# load the instance config, if it exists, when not testing # load the instance config, if it exists, when not testing
......
This diff is collapsed.
This diff is collapsed.
import re import re
from flask import Blueprint, request, json from flask import Blueprint, request, json
from pyecharts import options as opts # from pyecharts import options as opts
from pyecharts.charts import Graph as pg # from pyecharts.charts import Graph as pg
from app.model.base import dbconn, graph from app.model.base import dbconn, graph_driver
bp = Blueprint('search', __name__, url_prefix='/search') bp = Blueprint('search', __name__, url_prefix='/search')
...@@ -34,28 +34,31 @@ def illness_search(): ...@@ -34,28 +34,31 @@ def illness_search():
for val1 in vocab_data: for val1 in vocab_data:
search_data.append(keyword_clinical[val1]) search_data.append(keyword_clinical[val1])
# strData = jieba.cut(data['search_str'], cut_all=False) # # strData = jieba.cut(data['search_str'], cut_all=False)
# graph_sql = "match (n:`疾病(三)`) " # # graph_sql = "match (n:`疾病(三)`) "
# # #
# for search_str in search_data: # # for search_str in search_data:
# if search_str == '': # # if search_str == '':
# continue # # continue
# graph_sql += " with n match (n:`疾病(三)`)-[*1]->(a) where a.name='" + search_str + "' " # # graph_sql += " with n match (n:`疾病(三)`)-[*1]->(a) where a.name='" + search_str + "' "
# # #
# graph_sql += " return n" # # graph_sql += " return n"
# # #
# graph_data = graph.run(graph_sql).data() # # graph_data = graph.run(graph_sql).data()
if len(search_data) == 0:
return ''
illness_data = {} illness_data = {}
for search_str in search_data: for search_str in search_data:
if search_str == '': if search_str == '':
continue continue
graph_sql = "match (n:`疾病(三)`)-[*1]->(a:`病症`) where a.name='" + search_str + "' return n" graph_sql = "match (n:`疾病`)-[*1]->(a:`病症`) where a.name='" + search_str + "' return n"
graph_data = graph.run(graph_sql).data() records, _, _ = graph_driver.query(graph_sql)
for val2 in graph_data: for val2 in records:
if val2['n']['name'] in illness_data.keys(): if val2['n']['name'] in illness_data.keys():
illness_data[val2['n']['name']]['num'] += 1 illness_data[val2['n']['name']]['num'] += 1
else: else:
...@@ -68,16 +71,16 @@ def illness_search(): ...@@ -68,16 +71,16 @@ def illness_search():
list_illness_data = list(illness_data) list_illness_data = list(illness_data)
for key1 in list_illness_data: for key1 in list_illness_data:
graph_sql2 = "match (a:`疾病(三)`)-[]->(m:`治疗方案`)-[]->(n:`药品`) where a.name='" + key1 + "' return m,n" graph_sql2 = "match (a:`疾病`)-[]->(m:`治疗方案`)-[]->(n:`药品`) where a.name='" + key1 + "' return m,n"
graph_data2 = graph.run(graph_sql2).data() records2, _, _ = graph_driver.query(graph_sql2)
graph_sql3 = "match (a:`疾病(三)`)-[]->(m:`治疗方案`) where a.name='" + key1 + "' return m,n" # graph_sql3 = "match (a:`疾病`)-[]->(m:`治疗方案`) where a.name='" + key1 + "' return m,n"
graph_data3 = graph.run(graph_sql3).data() # graph_data3 = graph.run(graph_sql3).data()
medicinal = {} medicinal = {}
for val2 in graph_data2: for val2 in records2:
if val2['m']['name'] in medicinal.keys(): if val2['m']['name'] in medicinal.keys():
medicinal[val2['m']['name']].append(val2['n']['name']) medicinal[val2['m']['name']].append(val2['n']['name'])
else: else:
...@@ -90,71 +93,72 @@ def illness_search(): ...@@ -90,71 +93,72 @@ def illness_search():
# print(result) # print(result)
return json.dumps(result) return json.dumps(result)
return "1"
def testaaa(): def testaaa():
illnessDict = {} # 疾病 # illnessDict = {} # 疾病
symptomsDict = {} # 病症 # symptomsDict = {} # 病症
shipsData = {} # 三元组 # shipsData = {} # 三元组
graph_sql = "match (n:`疾病(三)`)-[*1]->(a:`病症`) where a.name='" + search_str + "' return n" # graph_sql = "match (n:`疾病(三)`)-[*1]->(a:`病症`) where a.name='" + search_str + "' return n"
graph_data = graph.run(graph_sql).data() # graph_data = graph.run(graph_sql).data()
while graph_data.forward(): # while graph_data.forward():
for relation in graph_data.current['p']: # for relation in graph_data.current['p']:
print(list(relation.types())) # print(list(relation.types()))
illness_node = relation.start_node # illness_node = relation.start_node
symptoms_node = relation.end_node # symptoms_node = relation.end_node
relation_type = list(relation.types())[0] # relation_type = list(relation.types())[0]
illness_node_label = str(illness_node.labels).strip(":") # illness_node_label = str(illness_node.labels).strip(":")
symptoms_node_label = str(symptoms_node.labels).strip(":") # symptoms_node_label = str(symptoms_node.labels).strip(":")
# 存储三元组关系 # # 存储三元组关系
if illness_node['id'] in shipsData.keys(): # if illness_node['id'] in shipsData.keys():
target_dict = shipsData.get(illness_node['id']) # target_dict = shipsData.get(illness_node['id'])
target_dict.setdefault(symptoms_node['id'], relation_type) # target_dict.setdefault(symptoms_node['id'], relation_type)
else: # else:
target_dict = {symptoms_node['id']: relation_type} # target_dict = {symptoms_node['id']: relation_type}
shipsData[illness_node['id']] = target_dict # shipsData[illness_node['id']] = target_dict
# 存储节点 # # 存储节点
if ("`疾病(三)`" == illness_node_label) and (illness_node['id'] not in illnessDict.keys()): # if ("`疾病(三)`" == illness_node_label) and (illness_node['id'] not in illnessDict.keys()):
illnessDict[illness_node['id']] = illness_node['name'] # illnessDict[illness_node['id']] = illness_node['name']
if ("病症" == symptoms_node_label) and (symptoms_node['id'] not in symptomsDict.keys()): # if ("病症" == symptoms_node_label) and (symptoms_node['id'] not in symptomsDict.keys()):
symptomsDict[symptoms_node['id']] = symptoms_node['name'] # symptomsDict[symptoms_node['id']] = symptoms_node['name']
json_list = [] # json_list = []
for illness_key, value in shipsData.items(): # for illness_key, value in shipsData.items():
for symptoms_key, rel_type in value.items(): # for symptoms_key, rel_type in value.items():
result_dict = { # result_dict = {
'illness': illnessDict[illness_key], # 'illness': illnessDict[illness_key],
'rel_type': rel_type, # 'rel_type': rel_type,
'symptoms': symptomsDict[symptoms_key] # 'symptoms': symptomsDict[symptoms_key]
} # }
json_list.append(result_dict) # json_list.append(result_dict)
print(len(json_list)) # print(len(json_list))
for i in range(len(json_list)): # for i in range(len(json_list)):
print("{}-[{}]->{}".format(json_list[i]['illness'], json_list[i]['rel_type'], json_list[i]['symptoms'])) # print("{}-[{}]->{}".format(json_list[i]['illness'], json_list[i]['rel_type'], json_list[i]['symptoms']))
return json_list # return json_list
data_dict = set() # data_dict = set()
nodes = [] # nodes = []
links = [] # links = []
for i in range(len(json_list)): # for i in range(len(json_list)):
if json_list[i]['illness'] not in data_dict: # if json_list[i]['illness'] not in data_dict:
data_dict.add(json_list[i]['illness']) # data_dict.add(json_list[i]['illness'])
nodes.append({'name': json_list[i]['illness'], "symbolSize": 10, 'draggable': 'true'}) # nodes.append({'name': json_list[i]['illness'], "symbolSize": 10, 'draggable': 'true'})
if json_list[i]['symptoms'] not in data_dict: # if json_list[i]['symptoms'] not in data_dict:
data_dict.add(json_list[i]['symptoms']) # data_dict.add(json_list[i]['symptoms'])
nodes.append({'name': json_list[i]['symptoms'], "symbolSize": 10, 'draggable': 'true'}) # nodes.append({'name': json_list[i]['symptoms'], "symbolSize": 10, 'draggable': 'true'})
links.append({'source': json_list[i]['illness'], 'target': json_list[i]['symptoms']}) # links.append({'source': json_list[i]['illness'], 'target': json_list[i]['symptoms']})
pg_graph = pg(init_opts=opts.InitOpts(width='1000px', height='800px')) # pg_graph = pg(init_opts=opts.InitOpts(width='1000px', height='800px'))
pg_graph.add("", nodes, links, repulsion=8000, edge_symbol=['', 'arrow']) # pg_graph.add("", nodes, links, repulsion=8000, edge_symbol=['', 'arrow'])
pg_graph.set_global_opts(title_opts=opts.TitleOpts(title="病症对应的疾病")) # pg_graph.set_global_opts(title_opts=opts.TitleOpts(title="病症对应的疾病"))
# print('/'.join(strData)+"") # print('/'.join(strData)+"")
...@@ -164,5 +168,6 @@ def testaaa(): ...@@ -164,5 +168,6 @@ def testaaa():
# ) # )
# print(drug) # print(drug)
# return render_template('index.html') # return render_template('index.html')
return pg_graph.render_notebook() # return pg_graph.render_notebook()
# return json.dumps(list(strData)) # return json.dumps(list(strData))
return "1"
\ No newline at end of file
from lib.libmysql import MYSQL, connect_db from lib.libmysql import MYSQL
from py2neo import Graph, Node, Relationship, NodeMatcher from lib.neo import NEO
dbconn = MYSQL( dbconn = MYSQL(
dbhost='39.96.85.45', dbhost='39.96.85.45',
...@@ -20,4 +20,14 @@ dbconn2 = MYSQL( ...@@ -20,4 +20,14 @@ dbconn2 = MYSQL(
) )
graph = Graph("bolt://gds-2zeyv40mi12s6mjc149870pub.graphdb.rds.aliyuncs.com:3734", auth=("dbc_tair", "dbc_tair888888")) # graph = Graph("", auth=("neo4j", "11111111"))
# graph = Graph("bolt://gds-2zeyv40mi12s6mjc149870pub.graphdb.rds.aliyuncs.com:3734", auth=("dbc_tair", "dbc_tair888888"))
# print(graph)
# graph_driver = GraphDatabase.driver("bolt://gds-2zeyv40mi12s6mjc149870pub.graphdb.rds.aliyuncs.com:3734",auth=("dbc_tair", "dbc_tair888888"),encrypted=False)
graph_driver = NEO(
dbhost='gds-2zeyv40mi12s6mjc149870pub.graphdb.rds.aliyuncs.com',
dbuser='dbc_tair',
dbpwd='dbc_tair888888'
)
# encoding: utf-8
from neo4j import GraphDatabase
class NEO:
def __init__(self, dbhost, dbuser, dbpwd, dbport=3734):
self.dbhost = dbhost
self.dbport = dbport
self.dbuser = dbuser
self.dbpwd = dbpwd
self.connection = self.session()
def session(self):
connection = GraphDatabase.driver(
uri="bolt://"+self.dbhost+":"+str(self.dbport),
auth=(self.dbuser,self.dbpwd),
encrypted=False
)
return connection
def execute_query(self, sql, **kwargs):
return self.connection.execute_query(sql, **kwargs)
def insert(self, sql, **kwargs):
return self.connection.execute_query(sql, **kwargs)
def query(self, sql, parameters={}):
return self.connection.execute_query(sql, parameters_=parameters)
def close(self):
if getattr(self, 'connection', 0):
return self.connection.close()
def __del__(self):
self.close()
beautifulsoup4==4.12.3 beautifulsoup4==4.12.3
clickhouse_driver==0.2.7 clickhouse-driver==0.2.7
Flask==3.0.3 Flask==3.0.3
py2neo==2021.2.4 py2neo==2021.2.3
pyecharts==2.0.5 pyecharts==2.0.5
PyMySQL==1.1.0 PyMySQL==1.1.0
Requests==2.31.0 Requests==2.31.0
neo4j~=5.20.0
pip~=24.0
wheel~=0.43.0
openssl~=3.2.1
jinja2~=3.1.3
setuptools~=69.2.0
\ No newline at end of file
...@@ -3,4 +3,5 @@ from app import create_app ...@@ -3,4 +3,5 @@ from app import create_app
app = create_app() app = create_app()
if __name__ == '__main__': if __name__ == '__main__':
app.run(host='0.0.0.0', port=5080, debug=True) # app.run(host='0.0.0.0', port=5080, debug=True)
app.run(port=5080, debug=True)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment