Example #1
0
def main():

    filename = sys.argv[1]
    text = open(filename).read()
    par = parser.Parser()
    par.build()
    par.parse(filename)

    # Uncomment to see output of parser
    print "\nentities", par.entity_arguments
    print "\npredicates", par.predicate_entities, par.predicate_arguments
    print "\nfiles", par.files
    print "\ngroupby", par.groupby
    print "\nfeat_file:", par.femodule
    print "\nfeat_class:", par.feclass
    print "\ndb_file:", par.dbmodule
    print "\ndb_class:", par.dbclass
    print "\nsc_file:", par.scmodule

    for i, ruleset in enumerate(par.rulesets):
        print "\nRuleset # {0}\n".format(i)

        if 'rule' in ruleset:
            print "Rules"
            for rule in ruleset['rule']:
                print rule
                print "\tfilters:", rule.filters
                print "\tfeat_functions:", rule.feat_functions
                print "\tdb_func:", rule.dbfunc
                print "\tsc_func:", rule.scoring_function
                print "\tlambda:", rule.lambda_
                print "\ttarget:", rule.target
                print "\tsplit_on:", rule.split_on
                print "\tsplit_on_type:", rule.split_on_ttype
        else:
            print "No rules parsed"

        if 'constr' in ruleset:
            print "\nConstraints"
            for rule in ruleset['constr']:
                print rule
                print "\tfilters:", rule.filters
        else:
            print "No constraints parsed"
Example #2
0
def main():
    if len(sys.argv) < 4:
        sys.exit(
            "Usage:" + " python " + sys.argv[0] +
            " [rule file] [data path] [filter_file] [-arg1 arg, -arg2 arg, ...]"
        )

    filename = sys.argv[1]
    text = open(filename).read()
    par = parser.Parser()
    par.build()
    par.parse(filename)

    filter_ids = []
    with open(sys.argv[3]) as f:
        for line in f:
            filter_ids.append(line.strip())

    kwargs = {}
    for i in range(4, len(sys.argv), 2):
        kwargs[sys.argv[i][1:]] = sys.argv[i + 1]

    db = Database()
    path = sys.argv[2]

    db.load_predicates(par.predicate_arguments, path, par.files)
    db.load_labels(par.label_types.keys(), path, par.files)

    for ruleset, group_by in zip(par.rulesets, par.groupby):
        for i, rule_template in enumerate(ruleset):

            X = []
            Y = []

            if rule_template.isconstr:
                continue

            mod = __import__(rule_template.feat_file,
                             fromlist=[rule_template.feat_class])
            fe_class = getattr(mod, rule_template.feat_class)

            if rule_template.head.isobs:
                # multiclass
                train_groundings = db.unfold_train_groundings(
                    rule_template, filter_by=(group_by, filter_ids))
            else:
                # binary
                neg_train_groundings = db.unfold_train_groundings(
                    rule_template,
                    filter_by=(group_by, filter_ids),
                    neg_head=True)
                pos_train_groundigs = db.unfold_train_groundings(
                    rule_template,
                    filter_by=(group_by, filter_ids),
                    neg_gead=False)
                train_groundings = neg_train_groundings + pos_train_groundigs

            fe = fe_class(train_groundings, **kwargs)
            fe.build()

            grd_x = fe.extract(train_groundings[0],
                               rule_template.feat_functions)
            rule_template.feat_vector_sz = len(grd_x)

            for instance_grd in train_groundings:
                grd_x = fe.extract(instance_grd, rule_template.feat_functions)
                X.append(grd_x)

                # when multiclass I need a label for the output
                if rule_template.head.isobs:
                    grd_y = fe.extract_multiclass_head(instance_grd)
                    Y.append(grd_y)

            X = np.asarray(X)
            Y = np.asarray(Y)
            print X.shape, Y.shape
Example #3
0
def main():
    if len(sys.argv) < 3:
        sys.exit("Usage:" + " python " + sys.argv[0] +
                 " [rule file] [data path] [dbmodulepath (optional)]")
    #fout = open("testresult.txt", 'w')

    filename = sys.argv[1]
    path = sys.argv[2]
    if len(sys.argv) > 3:
        dbmodule_path = sys.argv[3]

    text = open(filename).read()
    par = parser.Parser()
    par.build()
    par.parse(filename)

    # Uncomment to see output of parser
    print "predicates", par.predicate_arguments
    print "labels", par.label_types.keys()
    print "files", par.files
    print "rulesets", par.rulesets
    print "groupby", par.groupby

    ruleset = par.rulesets[0]
    group_by = par.groupby[0]

    if par.dbmodule is None:
        db = Database()
        db.load_predicates(par.predicate_arguments, path, par.files)
        db.load_predicates(par.entity_arguments, path, par.files)
        db.load_labels(par.label_types.keys(), path, par.files)
        db.predicate_entities = par.predicate_entities
        print db.table_index
    else:
        module_path = os.path.join(dbmodule_path, "{0}.py".format(dbmodule))
        mod = imp.load_source(par.dbmodule, module_path)
        db_class = getattr(mod, par.dbclass)
        db = db_class()
        db.load_data(dataset_path)

    # this will return the ids that can then be used to query the database
    # to group ILP problems
    instances = db.get_ruleset_instances(ruleset['rule'], group_by, [], False)

    for i in instances:
        instance_groundings = []
        constraint_groundings = []
        if i != 17:
            continue

        #fout.write("\ninstance: " + str(i))
        print "\ninstance " + str(i)

        gold_heads = db.get_gold_predicates(ruleset['rule'], [], group_by, i)
        gold_heads_set = set(
            [RuleGrounding.pred_str(head) for head in gold_heads])
        #print gold_heads_set

        for ruleidx, rule_template in enumerate(ruleset['rule']):
            print "Rule", rule_template
            class_split = None

            if par.dbmodule is None:
                rule_groundings = db.unfold_rule_groundings(rule_template,
                                                            ruleidx,
                                                            group_by,
                                                            i,
                                                            class_split,
                                                            gold_heads_set,
                                                            filter_by=[])
            else:
                rule_groundings = \
                    getattr(db, rule_template.dbfunc)(
                            istrain=False,
                            isneg=False,
                            filters=[],
                            split_class=class_split,
                            instance_id=i)
            #fout.write(str(rule_groundings) + "\n")
            instance_groundings += rule_groundings

        for rule_template in ruleset['constr']:
            print "Constraint", rule_template
            class_split = None

            if par.dbmodule is None:
                rule_groundings = db.unfold_rule_groundings(rule_template,
                                                            ruleidx,
                                                            group_by,
                                                            i,
                                                            class_split,
                                                            gold_heads_set,
                                                            filter_by=[])
            else:
                rule_groundings = \
                    getattr(db, rule_template.dbfunc)(
                            istrain=False,
                            isneg=False,
                            filters=[],
                            split_class=class_split,
                            instance_id=i)
            #fout.write(str(rule_groundings) + "\n")
            constraint_groundings += rule_groundings

        print "Instance groundings"
        for gr in instance_groundings:
            print gr

        print "Constraint groundings"
        for gr in constraint_groundings:
            print gr
        break
def main():
    if os.path.isfile(":memory"):
        os.system("rm :memory")

    if len(sys.argv) != 3:
        sys.exit("Usage: python {0} [rule_file] [data_path]".format(
            sys.argv[0]))

    filename = sys.argv[1]
    path = sys.argv[2]
    text = open(filename).read()
    par = parser.Parser()
    par.build()
    par.parse(filename)

    # Uncomment to see output of parser
    print "predicates", par.predicate_arguments
    print "labels", par.label_types.keys()
    print "files", par.files
    print "rulesets", par.rulesets
    print "groupby", par.groupby

    db = Database()

    db.load_predicates(par.predicate_arguments, path, par.files)
    db.load_labels(par.label_types.keys(), path, par.files)
    print db.table_index

    for ruleset, group_by in zip(par.rulesets, par.groupby):
        instances = db.get_ruleset_instances(ruleset, group_by)

        for i in instances:
            instance_groundings = []
            print "\ninstance " + str(i)
            for rule_template in ruleset:

                if not rule_template.head.isobs:
                    '''if the predicate is not observed we have a binary pred problem'''
                    # this will be positive examples
                    rule_groundings = db.unfold_train_groundings(
                        rule_template, group_by=group_by, instance_id=i)
                    # this will be negative examples
                    neg_rule_groundings = db.unfold_train_groundings(
                        rule_template,
                        neg_head=True,
                        group_by=group_by,
                        instance_id=i)

                    n_pos = len(rule_groundings)
                    n_neg = len(neg_rule_groundings)

                    print "Pos examples", n_pos / (n_pos + 1.0 * n_neg) * 100
                    print "Neg examples", n_neg / (n_pos + 1.0 * n_neg) * 100

                elif rule_template.head.label_type() is not None:
                    '''if the predicate is observed, then we must have an unobserved variable'''
                    rule_groundings = db.unfold_train_groundings(
                        rule_template, group_by=group_by, instance_id=i)
                else:
                    '''if the predicate is observed and the variables are observed
                    we don't have anything to predict'''
                    print "This rule has nothing to predict"
                    continue

            for i in range(0, min(100, len(rule_groundings))):
                print rule_groundings[i]

    os.system("rm :memory")
def main():
    if len(sys.argv) < 3:
        sys.exit("Usage:" + " python " + sys.argv[0] +
                 " [rule file] [data path] [filter_file1, filter_file2, ...]")
    #fout = open("testresult.txt", 'w')

    filename = sys.argv[1]
    text = open(filename).read()
    par = parser.Parser()
    par.build()
    par.parse(filename)

    filter_instances = []
    for i in range(3, len(sys.argv)):
        with open(sys.argv[i]) as f:
            for line in f:
                filter_instances.append(line.strip())

    # Uncomment to see output of parser
    print "predicates", par.predicate_arguments
    print "labels", par.label_types.keys()
    print "files", par.files
    print "rulesets", par.rulesets
    print "groupby", par.groupby

    db = Database()
    # Use your own path

    path = sys.argv[2]

    db.load_predicates(par.predicate_arguments, path, par.files)
    db.load_labels(par.label_types.keys(), path, par.files)
    print db.table_index

    ruleset = par.rulesets[0]
    groupby = par.groupby[0]

    for i, rule_template in enumerate(ruleset['predict']):
        #fout.write("\nrule_template: " + str(i))

        # this will return the ids that can then be used to query the database
        # to group ILP problems
        print "\ntemplate", rule_template
        '''
        if the predicate is not observed we have a binary predicate problem
        '''
        if rule_template.head.isobs == False:
            # this will be positive examples
            rule_groundings = db.unfold_train_groundings(
                rule_template, filter_by=(groupby, filter_instances))
            # this will be negative examples
            neg_rule_groundings = db.unfold_train_groundings(
                rule_template,
                filter_by=(groupby, filter_instances),
                neg_head=True)

            n_pos = len(rule_groundings)
            n_neg = len(neg_rule_groundings)

            print "Pos examples", n_pos / (n_pos + 1.0 * n_neg) * 100
            print "Neg examples", n_neg / (n_pos + 1.0 * n_neg) * 100
        elif rule_template.head.label_type() is not None:
            '''
            if the predicate is observed, then we must have an unobserved variable
            '''
            rule_groundings = db.unfold_train_groundings(
                rule_template, filter_by=(groupby, filter_instances))
        else:
            '''
            if the predicate is observed and the variables are observed
            we don't have anything to predict
            '''
            print "This rule has nothing to predict"
            continue

        if rule_template.head.isobs == False:
            print "NEG"
            for i in range(0, 100):
                print neg_rule_groundings[i]
            print "\nPOS"
        for i in range(0, min(len(rule_groundings), 100)):
            print rule_groundings[i]
Example #6
0
def main():
    print "main"
    if os.path.isfile(":memory"):
        os.system("rm :memory")

    if len(sys.argv) != 2:
        sys.exit("Usage:" + " python " + sys.argv[0] + " [rule file]")

    #'''
    # fout = open("testresult.txt", 'w')
    filename = sys.argv[1]
    text = open(filename).read()
    par = parser.Parser()
    par.build()
    par.parse(filename)

    # Uncomment to see output of parser
    print "predicates", par.predicate_arguments
    print "files", par.files
    print "rulesets", par.rulesets
    print "groupby", par.groupby

    db = Database()
    # Use your own path

    path = "examples/EntityRelation/all"

    db.load(par.predicate_arguments, path, par.files)
    print db.table_index

    for ruleset, group_by in zip(par.rulesets, par.groupby):
        # this will return the ids that can then be used to query the database
        # to group ILP problems
        instances = db.get_ruleset_instances(ruleset, group_by)
        #print instances

        # fout.write(str(instances) + "\n")

        for sent_id in instances:
            instance_groundings = []
            for rule_template in ruleset:
                rule_groundings = db.unfold_rule_groundings(
                    rule_template, group_by, sent_id)
                # fout.write(str(rule_groundings) + "\n")
                for g in rule_groundings:
                    print g
                instance_groundings += rule_groundings
            # instantiate an ILPinferencer
            ruleWeights = OrderedDict()
            for ruleGrg in instance_groundings:
                ruleWeights[ruleGrg] = 0.5
            inferencer = ILPInferencer(ruleWeights, 'LP')
            inferencer.createModel("testModel {}".format(sent_id))

            inferencer.addVariables()
            inferencer.addConstraints()

            print(str(inferencer.model))
            inferencer.optimize()
            predVal = inferencer.getAttriValues()

            break

    #    fout.write("\n")
    # fout.close()
    #'''

    os.system("rm :memory")