Re: [Zeitgeist] [Merge] lp:~kamstrup/zeitgeist/query-expansion into lp:zeitgeist

2010-05-12 Thread Markus Korn
Hey Mikkel,
thanks you for your works, it is working fine for me.
Feel free to merge this branch into lp:zeitgeist once you thought about my 
three comments ;)

Markus


> === modified file '_zeitgeist/engine/main.py'
> --- _zeitgeist/engine/main.py   2010-05-03 16:32:00 +
> +++ _zeitgeist/engine/main.py   2010-05-12 19:32:33 +
> @@ -32,7 +32,7 @@
>  from collections import defaultdict
>
>  from zeitgeist.datamodel import Event as OrigEvent, StorageState, TimeRange, 
> \
> -       ResultType, get_timestamp_for_now, Interpretation
> +       ResultType, get_timestamp_for_now, Interpretation, Symbol
>  from _zeitgeist.engine.datamodel import Event, Subject
>  from _zeitgeist.engine.extension import ExtensionsCollection, load_class
>  from _zeitgeist.engine import constants
> @@ -163,16 +163,51 @@
>                for (event_template, subject_template) in 
> self._build_templates(templates):
>                        subwhere = WhereClause(WhereClause.AND)
>                        try:
> -                               for key in ("interpretation", 
> "manifestation", "actor"):
> -                                       value = getattr(event_template, key)
> -                                       if value:
> -                                               subwhere.add("%s = ?" % key,
> -                                                       getattr(self, "_" + 
> key).id(value))
> -                               for key in ("interpretation", 
> "manifestation", "mimetype"):
> -                                       value = getattr(subject_template, key)
> -                                       if value:
> -                                               subwhere.add("subj_%s = ?" % 
> key,
> -                                                       getattr(self, "_" + 
> key).id(value))
> +                               # Expand event interpretation children
> +                               event_interp_where = 
> WhereClause(WhereClause.OR)
> +                               for child_interp in
> (Symbol.find_child_uris_extended(event_template.interpretation)):
> +                                       if child_interp:
> +                                               
> event_interp_where.add("interpretation = ?",
> +                                                                      
> self._interpretation.id(child_interp))
> +                               if event_interp_where:
> +                                       subwhere.extend(event_interp_where)
> +
> +                               # Expand event manifestation children
> +                               event_manif_where = 
> WhereClause(WhereClause.OR)
> +                               for child_manif in
> (Symbol.find_child_uris_extended(event_template.manifestation)):
> +                                       if child_manif:
> +                                               
> event_manif_where.add("manifestation = ?",
> +                                                                     
> self._manifestation.id(child_manif))
> +                               if event_manif_where:
> +                                       subwhere.extend(event_manif_where)
> +
> +                               # Expand subject interpretation children
> +                               su_interp_where = WhereClause(WhereClause.OR)
> +                               for child_interp in
> (Symbol.find_child_uris_extended(subject_template.interpretation)):
> +                                       if child_interp:
> +                                               
> su_interp_where.add("subj_interpretation = ?",
> +                                                                   
> self._interpretation.id(child_interp))
> +                               if su_interp_where:
> +                                       subwhere.extend(su_interp_where)
> +
> +                               # Expand subject manifestation children
> +                               su_manif_where = WhereClause(WhereClause.OR)
> +                               for child_manif in
> (Symbol.find_child_uris_extended(subject_template.manifestation)):
> +                                       if child_manif:
> +                                               
> su_manif_where.add("subj_manifestation = ?",
> +                                                                  
> self._manifestation.id(child_manif))
> +                               if su_manif_where:
> +                                       subwhere.extend(su_manif_where)
> +
> +                               # FIXME: Expand mime children as well.
> +                               # Right now we only do exact matching for 
> mimetypes
> +                               if subject_template.mimetype:
> +                                       subwhere.add("subj_mimetype = ?",
> +                                                    
> self._mimetype.id(subject_tempalte.mimetype))
> +
> +                               if event_t

[Zeitgeist] [Merge] lp:~kamstrup/zeitgeist/query-expansion into lp:zeitgeist

2010-05-10 Thread Mikkel Kamstrup Erlandsen
Mikkel Kamstrup Erlandsen has proposed merging 
lp:~kamstrup/zeitgeist/query-expansion into lp:zeitgeist.

Requested reviews:
  Zeitgeist Framework Team (zeitgeist)


Huzzah! Smackeroo! I have query expansion fully working now all unit tests 
passing. Both on the SQL level and on our template matching level.

So what does "query expansion" mean. Consider a query for subject with interp. 
nfo:Media. Right that would only match stuff that has been explicitly 
identified as nfo:Media (which is not much since we usually can identify whther 
stuff is Audio, Image, or Video data).

With query expansion we'll also match any children of nfo:Media. Ie also 
nfo:Image, nfo:Audio, and nfo:Video. Also recursively matching children of 
these like nfo:RasterImage and nfo:Vector image.

The way it's implemented is really simple. We simply expand the tree of 
children and compile a big OR query with everything.
-- 
https://code.launchpad.net/~kamstrup/zeitgeist/query-expansion/+merge/25000
Your team Zeitgeist Framework Team is requested to review the proposed merge of 
lp:~kamstrup/zeitgeist/query-expansion into lp:zeitgeist.
=== modified file '_zeitgeist/engine/main.py'
--- _zeitgeist/engine/main.py	2010-05-01 22:18:55 +
+++ _zeitgeist/engine/main.py	2010-05-10 14:47:20 +
@@ -32,7 +32,7 @@
 from collections import defaultdict
 
 from zeitgeist.datamodel import Event as OrigEvent, StorageState, TimeRange, \
-	ResultType, get_timestamp_for_now, Interpretation
+	ResultType, get_timestamp_for_now, Interpretation, Symbol
 from _zeitgeist.engine.datamodel import Event, Subject	
 from _zeitgeist.engine.extension import ExtensionsCollection, load_class
 from _zeitgeist.engine import constants
@@ -163,16 +163,51 @@
 		for (event_template, subject_template) in self._build_templates(templates):
 			subwhere = WhereClause(WhereClause.AND)
 			try:
-for key in ("interpretation", "manifestation", "actor"):
-	value = getattr(event_template, key)
-	if value:
-		subwhere.add("%s = ?" % key,
-			getattr(self, "_" + key).id(value))
-for key in ("interpretation", "manifestation", "mimetype"):
-	value = getattr(subject_template, key)
-	if value:
-		subwhere.add("subj_%s = ?" % key,
-			getattr(self, "_" + key).id(value))
+# Expand event interpretation children
+event_interp_where = WhereClause(WhereClause.OR)
+for child_interp in (Symbol.find_child_uris_extended(event_template.interpretation)):
+	if child_interp:
+		event_interp_where.add("interpretation = ?",
+		   self._interpretation.id(child_interp))
+if event_interp_where:
+	subwhere.extend(event_interp_where)
+
+# Expand event manifestation children
+event_manif_where = WhereClause(WhereClause.OR)
+for child_manif in (Symbol.find_child_uris_extended(event_template.manifestation)):
+	if child_manif:
+		event_manif_where.add("manifestation = ?",
+		  self._manifestation.id(child_manif))
+if event_manif_where:
+	subwhere.extend(event_manif_where)
+
+# Expand subject interpretation children
+su_interp_where = WhereClause(WhereClause.OR)
+for child_interp in (Symbol.find_child_uris_extended(subject_template.interpretation)):
+	if child_interp:
+		su_interp_where.add("subj_interpretation = ?",
+		self._interpretation.id(child_interp))
+if su_interp_where:
+	subwhere.extend(su_interp_where)
+
+# Expand subject manifestation children
+su_manif_where = WhereClause(WhereClause.OR)
+for child_manif in (Symbol.find_child_uris_extended(subject_template.manifestation)):
+	if child_manif:
+		su_manif_where.add("subj_manifestation = ?",
+		   self._manifestation.id(child_manif))
+if su_manif_where:
+	subwhere.extend(su_manif_where)
+
+# FIXME: Expand mime children as well.
+# Right now we only do exact matching for mimetypes
+if subject_template.mimetype:
+	subwhere.add("subj_mimetype = ?",
+	 self._mimetype.id(subject_tempalte.mimetype))
+
+if event_template.actor:
+	subwhere.add("actor = ?",
+	 self._actor.id(event_template.actor))
 			except KeyError:
 # Value not in DB
 where_or.register_no_result()
@@ -183,6 +218,7 @@
 	subwhere.add("subj_%s = ?" % key, value)
 			where_or.extend(subwhere)
 		
+		print "SQL:  ", where_or.sql, where_or.arguments
 		return where_or
 	
 	def _build_sql_event_filter(self, time_range, templates, storage_state):

=== modified file 'test/datamodel-test.py'
--- test/datamodel-test.py	2010-04-26 19:42:07 +
+++ test/datamodel-test.py	2010-05-10 14:47:20 +
@@ -51,6 +51,47 @@
 		self.assertTrue(f.display_name != None)
 		self.assertTrue(f.doc != None)
 
+class RelationshipTest (unittest.TestCase):
+	"""
+	Tests for parent/child relationships in the loaded ontologies
+	"""
+	
+	def testDirectParents (self):
+		"""
+		Tests relationshi