MCPcopy Create free account
hub / github.com/LHRLAB/ChatKBQA / try_relation

Function try_relation

eval_final.py:294–364  ·  view source on GitHub ↗
(d)

Source from the content-addressed store, hash-verified

292 return query_expr, denotation
293
294def try_relation(d):
295 ent_list = set()
296 rel_list = set()
297 denorm_sexpr = d.split(' ')
298 for item in denorm_sexpr:
299 if item.startswith('m.'):
300 ent_list.add(item)
301 elif '.' in item:
302 rel_list.add(item)
303 ent_list = list(ent_list)
304 rel_list = list(rel_list)
305 cand_rels = set()
306 for ent in ent_list:
307 in_rels, out_rels, _ = get_2hop_relations_with_odbc_wo_filter(ent)
308 cand_rels = cand_rels | set(in_rels) | set(out_rels)
309 cand_rels = list(cand_rels)
310 if len(cand_rels) == 0 or len(rel_list) == 0:
311 return d.replace('( ','(').replace(' )', ')'), []
312 similarities = model.similarity(rel_list, cand_rels)
313 change = dict()
314 for i, rel in enumerate(rel_list):
315 merged_list = list(zip(cand_rels, similarities[i]))
316 sorted_list = sorted(merged_list, key=lambda x: x[1], reverse=True)
317 change_rel = []
318 for s in sorted_list:
319 if s[1] > 0.01:
320 change_rel.append(s[0])
321 change[rel] = change_rel[:15]
322 for i, item in enumerate(denorm_sexpr):
323 if item in rel_list:
324 denorm_sexpr[i] = change[item]
325 combinations = [list(comb) for comb in itertools.islice(itertools.product(*[item if isinstance(item, list) else [item] for item in denorm_sexpr]),10000)]
326 exprs = [" ".join(s) for s in combinations][:4000]
327 query_exprs = [d.replace('( ','(').replace(' )', ')') for d in exprs]
328 for query_expr in query_exprs:
329 try:
330 # invalid sexprs, may leads to infinite loops
331 if 'OR' in query_expr or 'WITH' in query_expr or 'PLUS' in query_expr:
332 denotation = []
333 else:
334 sparql_query = lisp_to_sparql(query_expr)
335 denotation = execute_query_with_odbc(sparql_query)
336 denotation = [res.replace("http://rdf.freebase.com/ns/",'') for res in denotation]
337 if len(denotation) == 0 :
338
339 ents = set ()
340
341 for item in sparql_query.replace('(', ' ( ').replace(')', ' ) ').split(' '):
342 if item.startswith("ns:m."):
343 ents.add(item)
344 addline = []
345 for i, ent in enumerate(list(ents)):
346 addline.append(f'{ent} rdfs:label ?en{i} . ')
347 addline.append(f'?ei{i} rdfs:label ?en{i} . ')
348 addline.append(f'FILTER (langMatches( lang(?en{i}), "EN" ) )')
349 sparql_query = sparql_query.replace(ent, f'?ei{i}')
350 clauses = sparql_query.split('\n')
351 for i, line in enumerate(clauses):

Calls 3

lisp_to_sparqlFunction · 0.90
execute_query_with_odbcFunction · 0.90

Tested by

no test coverage detected