1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- from py2neo import Graph
- class AnswerSearcher:
- def __init__(self):
- self.g = Graph(
- "bolt://127.0.0.1:7687",
- # host="127.0.0.1",
- # http_port=7474,
- # user="neo4j",
- # password="123456"
- # http_port=7687, # neo4j 服务器监听的端口号
- user="neo4j", # 数据库user name,如果没有更改过,应该是neo4j
- password="123456")
- self.num_limit = 20
- '''执行cypher查询,并返回相应结果'''
- def search_main(self, sqls):
- final_answers = []
- for sql_ in sqls:
- question_type = sql_['question_type']
- queries = sql_['sql']
- answers = []
- for query in queries:
- ress = self.g.run(query).data()
- answers += ress
- final_answer = self.answer_prettify(question_type, answers)
- if final_answer:
- final_answers.append(final_answer)
- return final_answers
- '''根据对应的qustion_type,板调用相应的回复模'''
- def answer_prettify(self, question_type, answers):
- final_answer = []
- if not answers:
- return ''
- if question_type == 'entity_cause':
- desc = [i['c.name'] for i in answers]
- subject = answers[0]['a.name']
- final_answer = '{0}现象的原因包括:{1}'.format(
- subject, ';'.join(list(set(desc))[:self.num_limit]))
- elif question_type == 'parts':
- desc = [i['a.name'] for i in answers]
- subject = answers[0]['c.name']
- final_answer = '{0}的性能故障可能有:{1}'.format(
- subject, ';'.join(list(set(desc))[:self.num_limit]))
- elif question_type == 'solve':
- desc = [i['c.name'] for i in answers]
- subject = answers[0]['a.name']
- final_answer = '{0}的排故流程是:{1}'.format(
- subject, ';'.join(list(set(desc))[:self.num_limit]))
- elif question_type == 'entity_desc':
- subject = answers[0]['c.name']
- result = {}
- for answer in answers:
- rel_name = answer['rel_name']
- target_node_name = answer['target_nodes']
- if rel_name not in result:
- result[rel_name] = []
- result[rel_name].append(target_node_name)
- answer_list = []
- for key in result:
- if result[key]:
- desc = '、'.join(result[key][0])
- answer_list.append('{0}{1}有:{2}'.format(subject, key, desc))
- final_answer = ';\n'.join(answer_list)
- elif question_type == 'entity_desc1':
- subject = answers[0]['a.name']
- result = {}
- for answer in answers:
- rel_name = answer['rel_name']
- source_node_name = answer['source_nodes']
- if rel_name not in result:
- result[rel_name] = []
- result[rel_name].append(source_node_name)
- answer_list = []
- for key in result:
- if result[key]:
- desc = '、'.join(result[key][0])
- answer_list.append('{0}被发出的{1}关系有:{2}'.format(subject, key, desc))
- final_answer = ';'.join(answer_list)
- return final_answer
- if __name__ == '__main__':
- searcher = AnswerSearcher()
|