yaz/commit

add routines to create a user graph

authorMichiel Hildebrand
Fri Mar 30 17:03:22 2012 +0200
committerMichiel Hildebrand
Fri Mar 30 17:03:22 2012 +0200
commit4a911774a009e1540d7ba398fd3e5800d9769f7c
treedcc0fbf39c91df5f226cf3169a2056c0fa45c57c
parent1dbfca79b0545d26b1c1abe421730671663abf45
Diff style: patch stat
diff --git a/lib/user_prov.pl b/lib/user_prov.pl
index d68b640..f663d70 100644
--- a/lib/user_prov.pl
+++ b/lib/user_prov.pl
@@ -1,7 +1,51 @@
 :- module(user_prov,
-	  [list_user_tags/0]).
+	  [write_graph_csv/0,
+	   user_match/2,
+	   list_user_tags/0]).
 
 :- use_module(library(semweb/rdf_db)).
+:- use_module(library(video_annotation)).
+
+
+create_user_graph(Video, UserRelations) :-
+	findall(r(User1,User2),
+		(   user_match(Video, _Tag-Users),
+		    member(_-User1,Users),
+		    member(_-User2,Users),
+		    User1 \== User2
+		),
+		UserRelations).
+
+write_graph_csv :-
+	tell('user_graph.csv'),
+	findall(r(User1,User2),
+		(   annotated_video(Video),
+		    create_user_graph(Video, UserRelations),
+		    member(r(User1,User2), UserRelations)
+		),
+		Relations0),
+	sort(Relations0, Relations),
+	forall(member(r(U1,U2), Relations),
+	       (   rdf_global_id(_:UN1, U1),
+		   rdf_global_id(_:UN2, U2),
+		   format('~w,~w~n',[UN1,UN2])
+	       )),
+	told.
+
+annotated_video(Video) :-
+	rdf(Video,rdf:type,pprime:'Video'),
+	once(rdf(Video,pprime:hasAnnotation,_)).
+
+user_match(Video, Tag-Users) :-
+	video_annotations(Video,As,[interval(10)]),
+	member(annotation(Tag,_S,_E,Entries,_Score),As),
+	length(Entries,N),
+	N>1,
+	findall(Time-User,
+		(member(i(Entry,Time),Entries),
+		 rdf(Entry,pprime:creator,User)
+		), Users).
+
 
 list_user_tags :-
 	user_tags(PlayerTags),