这部分参考 该github项目
解析主函数
1.获取问句中的所有实体
2.根据问句类型生成不同的sql语句,并将实体传入
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 = []
#根据问句类型,定义相应sql语句
if question_type == 'drug_disease':
sql = self.sql_transfer(question_type, entity_dict.get('drug'))
elif question_type == 'drug_taste':
sql = self.sql_transfer(question_type, entity_dict.get('drug'))
elif question_type == 'drug_people':
sql = self.sql_transfer(question_type, entity_dict.get('drug'))
elif question_type == 'disease_drug':
sql = self.sql_transfer(question_type, entity_dict.get('disease'))
elif question_type == 'drug_ingredient':
sql = self.sql_transfer(question_type, entity_dict.get('drug'))
elif question_type == 'drug_desc':
sql = self.sql_transfer(question_type, entity_dict.get('drug'))
if sql:
sql_['sql'] = sql
sqls.append(sql_)
#返回词典列表,包含问题种类及其sql
return sqls
定义sql语句
以查询问什么病吃什么药为例
# 查询应该吃什么药
if question_type == 'disease_drug':
sql1 = ["MATCH (m:症状)<-[r:用治症状]->(n:中成药) where m.name = '{0}' return m.name, r.name, n.name".format(i) for i in entities]
sql2 = ["MATCH (m:疾病)<-[r:用治疾病]->(n:中成药) where m.name = '{0}' return m.name, r.name, n.name".format(i) for i in entities]
sql3 = ["MATCH (m:证候)<-[r:用治证候]->(n:中成药) where m.name = '{0}' return m.name, r.name, n.name".format(i) for i in entities]
sql=sql1+sql2+sql3