@@ -45,6 +45,8 @@ License, or (at your option) any later version.
4545
4646public class Utilities {
4747
48+ public static int REC_LIMIT = 20 ;
49+
4850 private final static String REV_START = "<rev xml:space=\" preserve\" >" ;
4951 private final static String REV_END = "</rev>" ;
5052
@@ -70,6 +72,14 @@ public static boolean isEntityEvaluated(BookmarkReader reader, int id, Integer m
7072 return false ;
7173 }
7274
75+ public static Map <Integer , Integer > getPopMap (BookmarkReader reader ) {
76+ Map <Integer , Integer > countMap = new LinkedHashMap <Integer , Integer >();
77+ for (int i = 0 ; i < reader .getTagCounts ().size (); i ++) {
78+ countMap .put (i , reader .getTagCounts ().get (i ));
79+ }
80+ return countMap ;
81+ }
82+
7383 public static List <Map <Integer , Integer >> getUserMaps (List <Bookmark > userLines ) {
7484 List <Map <Integer , Integer >> userMaps = new ArrayList <Map <Integer , Integer >>();
7585 for (Bookmark data : userLines ) {
@@ -82,6 +92,19 @@ public static List<Map<Integer, Integer>> getUserMaps(List<Bookmark> userLines)
8292 }
8393 return userMaps ;
8494 }
95+
96+ public static List <Map <Integer , Double >> getFloatUserMaps (List <Bookmark > userLines ) {
97+ List <Map <Integer , Double >> userMaps = new ArrayList <Map <Integer , Double >>();
98+ for (Bookmark data : userLines ) {
99+ int userID = data .getUserID ();
100+ if (userID >= userMaps .size ()) {
101+ userMaps .add (Utilities .mergeFloatListWithMap (data .getTags (), new LinkedHashMap <Integer , Double >()));
102+ } else {
103+ Utilities .mergeFloatListWithMap (data .getTags (), userMaps .get (userID ));
104+ }
105+ }
106+ return userMaps ;
107+ }
85108
86109 public static List <Map <Integer , Integer >> getResMaps (List <Bookmark > userLines ) {
87110 List <Map <Integer , Integer >> resMaps = new ArrayList <Map <Integer , Integer >>();
@@ -234,6 +257,14 @@ public static Map<Integer, Integer> mergeListWithMap(List<Integer> from, Map<Int
234257 }
235258 return to ;
236259 }
260+
261+ public static Map <Integer , Double > mergeFloatListWithMap (List <Integer > from , Map <Integer , Double > to ) {
262+ for (Integer value : from ) {
263+ Double count = to .get (value );
264+ to .put (value , (count != null ? count + 1 : 1 ));
265+ }
266+ return to ;
267+ }
237268
238269 public static Map <Integer , Double > mergeProbMaps (BookmarkReader reader , Map <Integer , Double > from ,
239270 Map <Integer , Double > to , double lambda ) {
@@ -484,15 +515,19 @@ public static double getJaccardFloatSim(Map<Integer, Double> targetMap, Map<Inte
484515 public static double getCosineSim (Map <Integer , Integer > targetMap , Map <Integer , Integer > nMap ) {
485516 Set <Integer > both = new HashSet <Integer >(targetMap .keySet ());
486517 both .retainAll (nMap .keySet ());
518+ if (both .size () == 0 ) {
519+ return 0.0 ;
520+ }
487521 double scalar = 0.0 , norm1 = 0.0 , norm2 = 0.0 ;
488522 for (int k : both )
489523 scalar += (targetMap .get (k ) * nMap .get (k ));
490524 for (int k : targetMap .keySet ())
491525 norm1 += (targetMap .get (k ) * targetMap .get (k ));
492526 for (int k : nMap .keySet ())
493527 norm2 += (nMap .get (k ) * nMap .get (k ));
494- if (Math .sqrt (norm1 * norm2 ) == 0.0 )
528+ if (Math .sqrt (norm1 * norm2 ) == 0.0 ) {
495529 return 0.0 ;
530+ }
496531 return scalar / Math .sqrt (norm1 * norm2 );
497532 }
498533
0 commit comments