예제 #1
0
def assert_true(query, e=None):
    if e is None:
        e = Engine()
    terms, vars = e.parse(query)
    term, = terms
    e.run_query_in_current(term)
    return dict([(name, var.dereference(None))
                 for name, var in vars.iteritems()])
예제 #2
0
def assert_true(query, e=None):
    if e is None:
        e = Engine()
    terms, vars = e.parse(query)
    term, = terms
    e.run_query_in_current(term)
    return dict([(name, var.dereference(None))
                     for name, var in vars.iteritems()])
예제 #3
0
def entry_point(argv):
    if len(argv) != 8:
        print(
            "Usage: spyrolog PROGRAM SIMILARITIES QUERY1|QUERY2|...|QUERYN MAX_DEPTH LAMBDA_CUT1|LAMBDA_CUT2|...|LAMBDA_CUTN E-TNORM|P-TNORM MIN_WIDTH"
        )
        return 1

    program_fname = argv[1]
    sim_fname = argv[2]
    queries = argv[3]
    max_depth = int(argv[4])
    lambda_cuts = [float(i) for i in argv[5].split('|')]
    entity_tnorm, predicate_tnorm = argv[6].split('|')
    min_width = int(argv[7])

    sim = get_similarity_from_file(sim_fname, 0, entity_tnorm, predicate_tnorm)
    e = Engine(load_system=False, similarity=sim, max_depth=max_depth)
    e.modulewrapper.current_module = e.modulewrapper.user_module
    with open(program_fname) as f:
        sim.parse_rulescores(f.read(), e)

    query_idx = 0
    for query in queries.split('|'):
        cut = lambda_cuts[query_idx]
        scores = []
        depths = []
        rules = []
        unifications = []
        sim.lambda_cut = cut
        sim.reset_threshold()
        sim.query_idx = query_idx
        collector = GetAllScoresContinuation(e, scores, sim, depths, rules,
                                             unifications, min_width)
        e.max_depth = max_depth

        goals, var_to_pos = e.parse(query)
        goal = goals[0]

        try:
            e.run_query_in_current(goal, collector)
        except UnificationFailed:
            info = get_max_info(scores, depths, rules, unifications)
            if info[0] > 0:
                print(info[0], info[1], '|'.join(info[3]),
                      query + ''.join(info[2]))
            else:
                print(0.0, 0)

        query_idx += 1
    return 0
예제 #4
0
def assert_false(query, e=None):
    if e is None:
        e = Engine()
    term = e.parse(query)[0][0]
    py.test.raises(UnificationFailed, e.run_query_in_current, term)
예제 #5
0
def assert_false(query, e=None):
    if e is None:
        e = Engine()
    term = e.parse(query)[0][0]
    py.test.raises(UnificationFailed, e.run_query_in_current, term)