12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- class QuestionParser:
- '''构建实体节点'''
- def build_entitydict(self, args):
- entity_dict = {}
- for arg, types in args.items():
- for type in types:
- if type not in entity_dict:
- entity_dict[type] = [arg]
- else:
- entity_dict[type].append(arg)
- return entity_dict
- '''解析主函数'''
- def parser_main(self, res_classify):
- args = res_classify['args']
- entity_dict = self.build_entitydict(args)
- question_types = res_classify['question_types']
- sqls = []
- for question_type in question_types:
- sql_ = {}
- sql_['question_type'] = question_type
- sql = []
- if question_type == 'parts':
- sql = self.sql_transfer(question_type, entity_dict.get('entity'))
- elif question_type == 'entity_cause':
- sql = self.sql_transfer(question_type, entity_dict.get('entity'))
- elif question_type == 'solve':
- sql = self.sql_transfer(question_type, entity_dict.get('entity'))
-
- elif question_type == 'entity_desc':
- sql = self.sql_transfer(question_type, entity_dict.get('entity'))
-
- elif question_type == 'entity_desc1':
- sql = self.sql_transfer(question_type, entity_dict.get('entity'))
- if sql:
- sql_['sql'] = sql
- sqls.append(sql_)
- return sqls
- '''针对不同的问题,分开进行处理'''
- def sql_transfer(self, question_type, entities):
- if not entities:
- return []
- # 查询语句
- sql = []
- # 查询故障的原因
- if question_type == 'entity_cause':
- sql = ["MATCH (a:故障现象{{name:'{0}'}})<-[:故障现象]-(b)-[:故障原因]->(c:故障原因) RETURN a.name, c.name ".format(i) for i in entities]
- #sql = ["MATCH (e1:Entity {{name: '{0}'}})-[:Relation]->(e2:Entity {{name: '{1}'}}) MATCH (e2)-[r1:Relation {{name: '故障原因'}}]->(e3:Entity) MATCH (e3)-[r2:Relation {{name: '部件故障'}}]->(e4:Entity) RETURN e1.name + e2.name, e3.name + e4.name".format(entities[0], entities[1])]
- # 查询部件的组成
- elif question_type == 'parts':
- sql = ["MATCH (n {{name: '{0}'}})-[r1:Relation {{name: '包含'}}]->(m)RETURN n.name, m.name".format(i) for i in entities]
- # 查询故障的解决方法
- elif question_type == 'solve':
- sql = ["MATCH (a:故障名称{{name:'{0}'}}) -[:排故流程]->(c:故障流程) RETURN a.name, c.name ".format(i) for i in entities]
- elif question_type == 'entity_desc':
- sql = ["MATCH (n:Entity {{name: '{0}'}})-[r:Relation]->(m) WITH n, r.name AS rel_name, COLLECT(m.name) AS target_nodes RETURN n.name, rel_name, target_nodes".format(i) for i in entities]
-
-
- elif question_type == 'entity_desc1':
- sql = ["MATCH (n)-[r:Relation]->(m:Entity {{name: '{0}'}})WITH m, r.name AS rel_name, COLLECT(n.name) AS source_nodes RETURN m.name, rel_name, source_nodes".format(i) for i in entities]
- # 已知检查查询故障
- #elif question_type == 'check_entity':
- # sql = ["MATCH (m:Entity)-[r:need_check]->(n:Check) where n.name = '{0}' return m.name, r.name, n.name".format(i) for i in entities]
- return sql
- if __name__ == '__main__':
- handler = QuestionParser()
|