Exemplo n.º 1
0
    def ParseRule(rule_str):
        rule_str = rule_str.strip().rstrip('.').replace(' ', '')
        index = rule_str.find(':-')

        conclusion = Fact.ParseFact(rule_str[:index])
        premises = []
        premises_str = rule_str[index + 2:].split('),')
        if 'not' in premises_str[len(premises_str) - 1]:
            premises_str.remove(premises_str[len(premises_str) - 1])
        for idx, premise_str in enumerate(premises_str):
            if idx != len(premises_str) - 1:
                premise_str += ')'
            premise = Fact.ParseFact(premise_str)
            premises.append(premise)
        return Rule(conclusion, premises)
Exemplo n.º 2
0
    def CreateKB(kb, clauses):
        while clauses:
            clause, clauses = Clause.NextClause(clauses)
            clause_type = Clause.Categorize(clause)
            if clause_type == 'fact':
                fact = Fact.ParseFact(clause)
                kb.AddFact(fact)
            elif clause_type == 'rule':
                if ';' in clause:
                    idx = clause.index(':-')
                    temp_clause = clause[idx + 2:].rstrip('.')
                    conclusion = clause[0:idx]
                    conditions_raw = temp_clause.split(';')
                    conditions = []
                    for condition in conditions_raw:
                        temp = condition.strip()
                        temp = temp[1:len(temp) - 1]
                        conditions.append(temp)

                    rules = []
                    for condition in conditions:
                        rule_str = conclusion + ':-' + condition + '.'
                        rules.append(rule_str)
                    for clause in rules:
                        rule = Rule.ParseRule(clause)
                        kb.AddRule(rule)
                elif ';' not in clause:
                    rule = Rule.ParseRule(clause)
                    kb.AddRule(rule)
Exemplo n.º 3
0
from kb import KB
from fact import Fact
import sys

kb = KB()

kb_file = sys.argv[1]
query_file = sys.argv[2]
answer_file = sys.argv[3]
kb_file = open(kb_file, 'r')
clauses = kb_file.readlines()
KB.CreateKB(kb, clauses)

query_file = open(query_file, 'r')
answer_file = open(answer_file, 'w')
count_query = 1
for query in query_file.readlines():
    alpha = Fact.ParseFact(query)
    alpha_str = str(alpha) + '.'
    print(str(count_query) + "/", alpha_str)
    substs = set(kb.Query(alpha))
    substs_str = ' ;\n'.join([str(subst) for subst in substs]) + '.\n'
    print(substs_str)
    answer_file.write(alpha_str + '\n')
    answer_file.write(substs_str + '\n')
    count_query += 1