summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeif Lotfy <seif@Gary>2010-04-19 14:42:18 +0200
committerSeif Lotfy <seif@Gary>2010-04-19 14:42:18 +0200
commitf11a850db7185b0ea00c8d14e9172393244b4f8a (patch)
tree426359fc22637bf6b2339658b6691bebb5857811
parent77669b41e32cb230d9a82844f85fe7556971f36c (diff)
improved speed
-rw-r--r--_zeitgeist/engine/main.py43
1 files changed, 19 insertions, 24 deletions
diff --git a/_zeitgeist/engine/main.py b/_zeitgeist/engine/main.py
index a9dd9632..d9805ba8 100644
--- a/_zeitgeist/engine/main.py
+++ b/_zeitgeist/engine/main.py
@@ -28,6 +28,8 @@ import math
import gettext
import logging
import operator
+from itertools import islice
+from collections import defaultdict
from zeitgeist.datamodel import Event as OrigEvent, StorageState, TimeRange, \
ResultType, get_timestamp_for_now, Interpretation
@@ -267,13 +269,10 @@ class ZeitgeistEngine:
return self._find_events(1, *args)
def __add_window(self, _set, assoc, landmarks, windows):
- if set(_set) & set(landmarks): # intersection != 0
+ if _set & landmarks: # intersection != 0
windows.append(_set)
- for i in _set:
- if not i in landmarks:
- if not assoc.has_key(i):
- assoc[i] = 0
- assoc[i] += 1
+ for i in _set.difference(landmarks):
+ assoc[i] += 1
def find_related_uris(self, timerange, event_templates, result_event_templates,
result_storage_state, num_results, result_type):
@@ -289,18 +288,17 @@ class ZeitgeistEngine:
the implementation may vary.
"""
-
if result_type == 0 or result_type == 1:
-
+
t1 = time.time()
uris = self._find_events(2, timerange, result_event_templates,
result_storage_state, 0, 1)
window_size = 7
- assoc = {}
+ assoc = defaultdict(int)
- landmarks = [unicode(event.subjects[0].uri) for event in event_templates]
+ landmarks = set([unicode(event.subjects[0].uri) for event in event_templates])
latest_uris = dict(uris)
events = [unicode(u[0]) for u in uris]
@@ -326,6 +324,7 @@ class ZeitgeistEngine:
return []
windows = []
+
if len(events) <= window_size:
#TODO bug! windows is not defined, seems the algorithm never touches these loop
func(events, assoc, landmarks, windows)
@@ -334,23 +333,19 @@ class ZeitgeistEngine:
offset = window_size/2
for i in xrange(offset):
- func(list(set(events[0: offset - i])), assoc, landmarks,
+ func(set(events[0: offset - i]), assoc, landmarks,
windows)
+
+ it = iter(events)
+ result = tuple(islice(it, window_size))
+ for elem in it:
+ result = result[1:] + (elem,)
+ func(set(result), assoc, landmarks, windows)
+
for i in xrange(offset):
- func( list(set(events[len(events) - offset + i: len(events)])),
+ func(set(events[len(events) - offset + i: len(events)]),
assoc, landmarks, windows)
- for i in xrange(len(events)):
- if i < offset:
- func( list(set(events[0: i + offset + 1])), assoc,
- landmarks, windows)
- elif len(events) - offset - 1 < i:
- func( list(set(events[i-offset: len(events)])), assoc,
- landmarks, windows)
- else:
- func( list(set(events[i-offset: i+offset+1])), assoc,
- landmarks, windows)
-
-
+
log.debug("FindRelatedUris: Finished sliding windows in %fs." % \
(time.time()-t1))