Mercurial > code > home > repos > homeauto
comparison service/reasoning/inference.py @ 825:fc753b24f69a
move reasoning from /my/proj/room, new integration with magma
Ignore-this: 5c5551d566324f5a6e87f6f7623f3c3
darcs-hash:20120207104522-312f9-f9c6e106e4434d65498c0f12acd01889676653b5.gz
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Tue, 07 Feb 2012 02:45:22 -0800 |
parents | |
children | 5b0f970e3d52 |
comparison
equal
deleted
inserted
replaced
824:de21ca2f75c7 | 825:fc753b24f69a |
---|---|
1 """ | |
2 see ./reasoning for usage | |
3 """ | |
4 | |
5 import sys, re | |
6 import restkit | |
7 from rdflib import StringInputSource, URIRef | |
8 from rdflib.Graph import Graph | |
9 | |
10 sys.path.append("/my/proj/room/fuxi/build/lib.linux-x86_64-2.6") | |
11 from FuXi.Rete.Util import generateTokenSet | |
12 from FuXi.Rete import ReteNetwork | |
13 from rdflib import plugin | |
14 from rdflib.store import Store | |
15 | |
16 def parseTrig(trig): | |
17 """ | |
18 yields quads | |
19 """ | |
20 m = re.match(r"<([^>]+)> \{(.*)\}\s*$", trig, re.DOTALL) | |
21 if m is None: | |
22 raise NotImplementedError("trig format was too tricky: %r..." % trig[:200]) | |
23 | |
24 ctx = URIRef(m.group(1)) | |
25 n3 = m.group(2) | |
26 g = Graph() | |
27 g.parse(StringInputSource(n3), format="n3") | |
28 for stmt in g: | |
29 yield stmt + (ctx,) | |
30 | |
31 def infer(graph, rules): | |
32 """ | |
33 returns new graph of inferred statements | |
34 """ | |
35 # based on fuxi/tools/rdfpipe.py | |
36 store = plugin.get('IOMemory',Store)() | |
37 store.open('') | |
38 | |
39 target = Graph() | |
40 tokenSet = generateTokenSet(graph) | |
41 network = ReteNetwork(rules, inferredTarget=target) | |
42 network.feedFactsToAdd(tokenSet) | |
43 | |
44 store.rollback() | |
45 return target | |
46 | |
47 import time, logging | |
48 log = logging.getLogger() | |
49 def logTime(func): | |
50 def inner(*args, **kw): | |
51 t1 = time.time() | |
52 try: | |
53 ret = func(*args, **kw) | |
54 finally: | |
55 log.info("Call to %s took %.1f ms" % ( | |
56 func.__name__, 1000 * (time.time() - t1))) | |
57 return ret | |
58 return inner | |
59 | |
60 def addTrig(graph, url): | |
61 trig = restkit.request(url).body_string() | |
62 graph.addN(parseTrig(trig)) |