コード例 #1
0
ファイル: query.py プロジェクト: delph-in/pydmrs
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
コード例 #2
0
ファイル: paraphrase.py プロジェクト: goodmami/pydmrs
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
コード例 #3
0
 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
コード例 #4
0
ファイル: dmrs.py プロジェクト: codeaudit/ShapeWorld
 def parse(string):
     anchors = dict()
     dmrs = parse_graphlang(string, cls=ComposableDmrs, anchors=anchors)
     dmrs.anchors = anchors
     return dmrs
コード例 #5
0
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
コード例 #6
0
ファイル: examples_toy_robot.py プロジェクト: goodmami/pydmrs
                            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'
コード例 #7
0
ファイル: examples_mapping.py プロジェクト: delph-in/pydmrs
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)
コード例 #8
0
ファイル: examples_toy_robot.py プロジェクト: delph-in/pydmrs
                            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'