package happy.research.cf; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class RN_t extends Thread_t { Map<String, Map<String, Double>> userTNsCorrMap = null; public RN_t(int id, Map<String, Map<String, Double>> userTNsCorrMap) { super(id); this.userTNsCorrMap = userTNsCorrMap; } @SuppressWarnings("unchecked") @Override protected Map<String, Double>[] buildModel(Rating testRating) { String user = testRating.getUserId(); String item = testRating.getItemId(); if (!userTNsCorrMap.containsKey(user)) return null; Map<String, Double> tnsCorrMap = userTNsCorrMap.get(user); if (tnsCorrMap == null || tnsCorrMap.size() < 1) return null; Map<String, Double> tnsMap = new HashMap<>(); Map<String, Double> ratingsMap = new HashMap<>(); for (Entry<String, Double> entry : tnsCorrMap.entrySet()) { String userB = entry.getKey(); double similarity = entry.getValue(); if (similarity < params.SIMILARITY_THRESHOLD) continue; double bsRating = 0.0; Map<String, Rating> bsRatings = userRatingsMap.get(userB); if (bsRatings != null && bsRatings.containsKey(item)) bsRating = bsRatings.get(item).getRating(); if (bsRating <= 0.0) continue; // no rating on this item tnsMap.put(userB, similarity); ratingsMap.put(userB, bsRating); } return new Map[] { tnsMap, ratingsMap }; } }