def dmrs_query(dmrs_iter, search_dmrs_graphlang, results_as_dict=False, results_per_dmrs=False): """ Queries DMRS graphs for an underspecified (sub)graph pattern and returns the values of named wildcards (of the form "?[Identifier]") as they are specified in the queried graph. :param dmrs_iter An iterator of DMRS graphs to query. :param search_dmrs_graphlang The query DMRS (sub)graph, given as a GraphLang string. :param results_as_dict True if a query result should be a dictionary, mapping identifiers to values. :param results_per_dmrs True if a (possibly empty) list per DMRS should be returned. :return Iterator of dicts containing the matching node ids. """ queries = {} search_dmrs = parse_graphlang(search_dmrs_graphlang, queries=queries) queries = [(key, queries[key]) for key in sorted(queries)] for dmrs in dmrs_iter: assert isinstance(dmrs, Dmrs), 'Object in dmrs_iter is not a Dmrs.' # perform an exact matching of search_dmrs against dmrs matchings = dmrs_exact_matching(search_dmrs, dmrs) if results_per_dmrs: results = [] for matching in matchings: # extract matched values if results_as_dict: result = {key: query(matching, dmrs) for key, query in queries} else: result = tuple(query(matching, dmrs) for _, query in queries) if results_per_dmrs: results.append(result) else: yield result if results_per_dmrs: yield results
def read_paraphrases_file(filename): """ """ paraphrases = [] file = open(filename, 'r') lines = iter(file) for line in lines: try: # equalities etc paraphrases.append( (parse_graphlang(line), parse_graphlang(next(lines)))) except StopIteration: assert False, 'Invalid paraphrases file format.' try: assert not next(lines) except StopIteration: break return paraphrases
def parse(string, sortinfo_classes=None, sortinfo_shortforms=None): anchors = dict() dmrs = parse_graphlang(string, cls=Dmrs, anchors=anchors, sortinfo_classes=sortinfo_classes, sortinfo_shortforms=sortinfo_shortforms) dmrs.anchors = anchors return dmrs
def parse(string): anchors = dict() dmrs = parse_graphlang(string, cls=ComposableDmrs, anchors=anchors) dmrs.anchors = anchors return dmrs
from pydmrs.pydelphin_interface import parse, generate from pydmrs.mapping.mapping import dmrs_mapping from pydmrs.graphlang.graphlang import parse_graphlang import examples.examples_dmrs as examples if __name__ == '__main__': # basic functionality dmrs = examples.the_dog_chases_the_cat() search_dmrs = parse_graphlang('[1]:_the_q') replace_dmrs = parse_graphlang('[1]:_a_q') # iterative, all assert 'A dog chases a cat.' in generate( dmrs_mapping(dmrs, search_dmrs, replace_dmrs, copy_dmrs=True, iterative=True, all_matches=True)) # not iterative, all assert all(sent in sents for sent, sents in zip( ['A dog chases the cat.', 'The dog chases a cat.'], [ generate(dmrs) for dmrs in dmrs_mapping(dmrs, search_dmrs, replace_dmrs, copy_dmrs=True, iterative=False, all_matches=True) ])) # iterative, not all
dmrs.add_link( Link(old_link.start, nid, old_link.rargname, old_link.post)) # Remove the second node and update the first dmrs.remove_node(link.end) dmrs[nid].pred = new return dmrs dmrsstring = ''' _then_c -L-HNDL/H-> _drive_v_1 <-L-INDEX/NEQ- :_then_c -R-HNDL/H-> _turn_v_1 <-R-INDEX/NEQ- :_then_c; pronoun_q -RSTR/H-> pron <-1- :_drive_v_1 <=1= _forwards_p; pronoun_q -RSTR/H-> pron <-1- :_turn_v_1 <=1= loc_nonsp -2-> place_n <-RSTR/H- def_implicit_q; _left_a_1 =1=> :place_n ''' dmrs = parse_graphlang(dmrsstring) dmrs.surface = 'Drive forwards then turn left' print([(n.nodeid, n.pred) for n in dmrs.nodes]) print(dmrs.links) simplify(dmrs) print() print([(n.nodeid, n.pred) for n in dmrs.nodes]) print(dmrs.links) 'Go forward and then turn to the left' 'Turn left at a yellow line' 'On a yellow line, turn to the left'
from pydmrs.pydelphin_interface import parse, generate from pydmrs.mapping.mapping import dmrs_mapping from pydmrs.graphlang.graphlang import parse_graphlang import examples.examples_dmrs as examples if __name__ == '__main__': # basic functionality dmrs = examples.the_dog_chases_the_cat() search_dmrs = parse_graphlang('[1]:_the_q') replace_dmrs = parse_graphlang('[1]:_a_q') # iterative, all assert 'A dog chases a cat.' in generate(dmrs_mapping(dmrs, search_dmrs, replace_dmrs, copy_dmrs=True, iterative=True, all_matches=True)) # not iterative, all assert all(sent in sents for sent, sents in zip(['A dog chases the cat.', 'The dog chases a cat.'], [generate(dmrs) for dmrs in dmrs_mapping(dmrs, search_dmrs, replace_dmrs, copy_dmrs=True, iterative=False, all_matches=True)])) # iterative, not all assert 'A dog chases the cat.' in generate(dmrs_mapping(dmrs, search_dmrs, replace_dmrs, copy_dmrs=True, iterative=True, all_matches=False)) # not iterative, not all assert 'A dog chases the cat.' in generate(dmrs_mapping(dmrs, search_dmrs, replace_dmrs, copy_dmrs=True, iterative=False, all_matches=False)) # original dmrs did not change so far assert 'The dog chases the cat.' in generate(dmrs) # iterative, not all dmrs = examples.the_dog_chases_the_cat() dmrs_mapping(dmrs, search_dmrs, replace_dmrs, copy_dmrs=False, iterative=True, all_matches=False) assert 'A dog chases the cat.' in generate(dmrs) # iterative, all dmrs = examples.the_dog_chases_the_cat() dmrs_mapping(dmrs, search_dmrs, replace_dmrs, copy_dmrs=False, iterative=True, all_matches=True) assert 'A dog chases a cat.' in generate(dmrs)
dmrs.add_link(Link(nid, old_link.end, old_link.rargname, old_link.post)) for old_link in dmrs.get_in(endid): dmrs.add_link(Link(old_link.start, nid, old_link.rargname, old_link.post)) # Remove the second node and update the first dmrs.remove_node(link.end) dmrs[nid].pred = new return dmrs dmrsstring = ''' _then_c -L-HNDL/H-> _drive_v_1 <-L-INDEX/NEQ- :_then_c -R-HNDL/H-> _turn_v_1 <-R-INDEX/NEQ- :_then_c; pronoun_q -RSTR/H-> pron <-1- :_drive_v_1 <=1= _forwards_p; pronoun_q -RSTR/H-> pron <-1- :_turn_v_1 <=1= loc_nonsp -2-> place_n <-RSTR/H- def_implicit_q; _left_a_1 =1=> :place_n ''' dmrs = parse_graphlang(dmrsstring) dmrs.surface = 'Drive forwards then turn left' print([(n.nodeid, n.pred) for n in dmrs.nodes]) print(dmrs.links) simplify(dmrs) print() print([(n.nodeid, n.pred) for n in dmrs.nodes]) print(dmrs.links) 'Go forward and then turn to the left' 'Turn left at a yellow line' 'On a yellow line, turn to the left'