コード例 #1
0
ファイル: graphmin.py プロジェクト: pombredanne/graphmin
    def command(self):
        if self.opts.infile == "-":
            infile = sys.stdin
        else:
            infile = open(self.opts.infile)

        facts = Graph()
        facts.parse(infile, format=self.get_informat())
        infile.close()

#        rstore, rgraph = SetupRuleStore()
#        network = ReteNetwork(rstore)
#        rules = HornFromN3(self.opts.rules)
#        for rule in rules:
#            network.buildNetworkFromClause(rule)
#        network.feedFactsToAdd(generateTokenSet(facts))
#
#        facts += network.inferredFacts

        minimised = Graph()
        minimised.namespace_manageer = facts.namespace_manager
        minimised += facts
        
        for s,p,o in facts.triples((None, None, None)):
            minimised.remove((s,p,o))
            rules = HornFromN3(self.opts.rules)
            topDownStore = TopDownSPARQLEntailingStore(
                minimised.store,
                minimised,
                idb=rules,
                decisionProcedure=0,
                derivedPredicates=[p])
            target = Graph(topDownStore)

            q = "ASK WHERE { %s }" % " ".join(x.n3() for x in (s,p,o))
            log.debug("QUERY %s" % q)
            result = target.query(q).askAnswer[0]
            log.debug("RESULT %s" % result)
            if not result:
                minimised.add((s,p,o))
                if self.opts.debug:
                    log.info("KEEP %s." % " ".join(x.n3() for x in (s,p,o)))
            elif self.opts.debug:
                log.info("DROP %s." % " ".join(x.n3() for x in (s,p,o)))

        if self.opts.outfile == "-":
            outfile = sys.stdout
        else:
            outfile = open(self.opts.outfile, "w+")
        minimised.serialize(outfile, format=self.opts.format)
        outfile.close()