在上文我已经构建了知识图谱,接下面我想搭建一个前端网页,可供查询与展示。对此我找github上找了一个轮子,简单搭建了一下已经基本满足我的需求
选择的路线是d3.js+neo4j+python,写这个轮子的人给我留了一个bug,导致我不能跳转页面,害,有能力还是自己搭建,别懒
简单来说,就是通过查询,把查询到的数据转化成前端的数据格式
查询数据
def query(name):
data = graph.run("match(p:my_entity {name:'%s'}) -[r]->(n) return p.name, r, n.name limit 50" % name)
data = list(data)
return get_json_data(data)
转化数据格式
def get_json_data(data):
json_data = {'data': [], "links": []}
d = []
for i in data:
# print(i["p.Name"], i["r.relation"], i["n.Name"], i["p.cate"], i["n.cate"])
d.append(i['p.name']+"_")
d.append(i['n.name']+"_")
d = list(set(d))
name_dict = {}
count = 0
for j in d:
j_array = j.split("_")
data_item = {}
name_dict[j_array[0]] = count
count += 1
data_item['name'] = j_array[0]
#data_item['category'] = CA_LIST[j_array[1]]
json_data['data'].append(data_item)
for i in data:
string=str(i['r'])
p = re.compile(".*?:`(.*?)`]->.*?", re.S)
result = re.findall(p, string)
link_item = {}
link_item['source'] = name_dict[i['p.name']]
link_item['target'] = name_dict[i['n.name']]
link_item['value'] = result
json_data['links'].append(link_item)
return json_data
启动程序my_app.py
from flask import Flask, render_template, request, jsonify
from inquire_kg import query,get_answer_profile
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
return render_template('index.html')
@app.route('/search', methods=['GET', 'POST'])
def search():
return render_template('search.html')
@app.route('/search_name', methods=['GET', 'POST'])
def search_name():
name = request.args.get('name')
json_data=query(str(name))
return jsonify(json_data)
@app.route('/get_profile',methods=['GET','POST'])
def get_profile():
name = request.args.get('character_name')
json_data = get_answer_profile(name)
return jsonify(json_data)
if __name__ == '__main__':
app.debug=True
app.run()
前端的轮子在github,那个轮子留了一个bug,我已经修改了
到这里,整个新冠肺炎知识图谱可视化已经构建完了
github传送门:https://github.com/Real-TomHy/novel-coronavirus-pneumoniaKG