import re from flask import Blueprint, request, json from app.model.base import dbconn, graph_driver bp = Blueprint('search', __name__, url_prefix='/search') keyword = [] keyword_clinical = {} sql_str = 'SELECT clinical, keyword FROM keyword_clinical' rows = dbconn.query( sql=sql_str ) for val_keyword in rows: keyword.append(val_keyword['keyword']) keyword_clinical[val_keyword['keyword']] = val_keyword['clinical'] @bp.route('/illness_search', methods=['POST', 'GET']) def illness_search(): print(111) if request.method == 'POST': req = request.get_json() vocab_pattern = '|'.join(keyword) vocab_data = re.findall(vocab_pattern, req['search']) # search_data = search_keyword(vocab_data) search_data = [] for val1 in vocab_data: search_data.append(keyword_clinical[val1]) # # strData = jieba.cut(data['search_str'], cut_all=False) # # graph_sql = "match (n:`疾病(三)`) " # # # # for search_str in search_data: # # if search_str == '': # # continue # # graph_sql += " with n match (n:`疾病(三)`)-[*1]->(a) where a.name='" + search_str + "' " # # # # graph_sql += " return n" # # # # graph_data = graph.run(graph_sql).data() if len(search_data) == 0: return '' illness_data = {} for search_str in search_data: if search_str == '': continue graph_sql = "match (n:`疾病`)-[*1]->(a:`病症`) where a.name='" + search_str + "' return n" records, _, _ = graph_driver.query(graph_sql) for val2 in records: if val2['n']['name'] in illness_data.keys(): illness_data[val2['n']['name']]['num'] += 1 else: illness_data[val2['n']['name']] = {'num': 1, 'name': val2['n']['name']} if len(illness_data) == 0: return '' result = [] list_illness_data = list(illness_data) for key1 in list_illness_data: graph_sql2 = "match (a:`疾病`)-[]->(m:`治疗方案`)-[]->(n:`药品`) where a.name='" + key1 + "' return m,n" records2, _, _ = graph_driver.query(graph_sql2) # graph_sql3 = "match (a:`疾病`)-[]->(m:`治疗方案`) where a.name='" + key1 + "' return m,n" # graph_data3 = graph.run(graph_sql3).data() medicinal = {} for val2 in records2: if val2['m']['name'] in medicinal.keys(): medicinal[val2['m']['name']].append(val2['n']['name']) else: medicinal[val2['m']['name']] = [val2['n']['name']] illness_data[key1]['treatment'] = medicinal result.append(illness_data[key1]) # print(result) return json.dumps(result) return "1" def testaaa(): # illnessDict = {} # 疾病 # symptomsDict = {} # 病症 # shipsData = {} # 三元组 # graph_sql = "match (n:`疾病(三)`)-[*1]->(a:`病症`) where a.name='" + search_str + "' return n" # graph_data = graph.run(graph_sql).data() # while graph_data.forward(): # for relation in graph_data.current['p']: # print(list(relation.types())) # illness_node = relation.start_node # symptoms_node = relation.end_node # relation_type = list(relation.types())[0] # illness_node_label = str(illness_node.labels).strip(":") # symptoms_node_label = str(symptoms_node.labels).strip(":") # # 存储三元组关系 # if illness_node['id'] in shipsData.keys(): # target_dict = shipsData.get(illness_node['id']) # target_dict.setdefault(symptoms_node['id'], relation_type) # else: # target_dict = {symptoms_node['id']: relation_type} # shipsData[illness_node['id']] = target_dict # # 存储节点 # if ("`疾病(三)`" == illness_node_label) and (illness_node['id'] not in illnessDict.keys()): # illnessDict[illness_node['id']] = illness_node['name'] # if ("病症" == symptoms_node_label) and (symptoms_node['id'] not in symptomsDict.keys()): # symptomsDict[symptoms_node['id']] = symptoms_node['name'] # json_list = [] # for illness_key, value in shipsData.items(): # for symptoms_key, rel_type in value.items(): # result_dict = { # 'illness': illnessDict[illness_key], # 'rel_type': rel_type, # 'symptoms': symptomsDict[symptoms_key] # } # json_list.append(result_dict) # print(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'])) # return json_list # data_dict = set() # nodes = [] # links = [] # for i in range(len(json_list)): # if json_list[i]['illness'] not in data_dict: # data_dict.add(json_list[i]['illness']) # nodes.append({'name': json_list[i]['illness'], "symbolSize": 10, 'draggable': 'true'}) # if json_list[i]['symptoms'] not in data_dict: # data_dict.add(json_list[i]['symptoms']) # nodes.append({'name': json_list[i]['symptoms'], "symbolSize": 10, 'draggable': 'true'}) # 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.add("", nodes, links, repulsion=8000, edge_symbol=['', 'arrow']) # pg_graph.set_global_opts(title_opts=opts.TitleOpts(title="病症对应的疾病")) # print('/'.join(strData)+"") # sql='SELECT d.id, d.drug_name,a.res FROM drug as d left join api as a on d.drug_name = a.param where d.id > 943' # drug = mysqlconn.query( # sql='SELECT d.id, d.disease_name FROM disease as d where d.id > 0' # ) # print(drug) # return render_template('index.html') # return pg_graph.render_notebook() # return json.dumps(list(strData)) return "1"