/** * Make a fresh rating object with no timestamp. * * @see #make(long, long, double, long) * @deprecated Use {@link Rating#create(long, long, double)}. */ @Deprecated public static Rating make(long uid, long iid, double value) { return new RatingBuilder().setUserId(uid) .setItemId(iid) .setRating(value) .build(); }
/** * Make a fresh rating event. * * @deprecated Use {@link Rating#create(long, long, double, long)} */ @Deprecated public static Rating make(long uid, long iid, double value, long ts) { return new RatingBuilder().setUserId(uid) .setItemId(iid) .setRating(value) .setTimestamp(ts) .build(); } }
public Rating rating(long uid, long iid, double rating) { return Rating.newBuilder() .setId(++entityId) .setUserId(uid) .setItemId(iid) .setRating(rating) .build(); }
public Rating rating(long uid, long iid, double rating, long timestamp) { return Rating.newBuilder() .setId(++entityId) .setUserId(uid) .setItemId(iid) .setRating(rating) .setTimestamp(timestamp) .build(); }
@Test public void testInitialState() { RatingBuilder rb = new RatingBuilder(); try { rb.build(); fail("building a rating should fail"); } catch (IllegalStateException e) { /* expected */ } }
@SuppressWarnings("deprecation") @Test /* * Test method that tests unrated items for a user in the data set, * it shouldn't return any value. * */ @Ignore("unrates are going away") public void testPredictForUnratedItems() { RatingBuilder rb = new RatingBuilder().setUserId(420); rs.add(rb.setItemId(840).setRating(3.5).setTimestamp(10).build()); rs.add(rb.setItemId(390).setRating(4.5).setTimestamp(20).build()); rs.add(rb.setItemId(840).clearRating().setTimestamp(30).build()); dao = StaticDataSource.fromList(rs).get(); KnownRatingRatingPredictor pred = new KnownRatingRatingPredictor(dao); Map<Long,Double> results = pred.predict(420, LongUtils.packedSet(840, 390)); assertThat(results, hasEntry(390L, 4.5)); assertThat(results.keySet(), not(Matchers.hasItem(840L))); } }
@Test public void testBuildRating() { Rating r = new RatingBuilder() .setUserId(692) .setItemId(483) .setRating(3.5) .setTimestamp(349702) .build(); assertThat(r, notNullValue()); assertThat(r.getUserId(), equalTo(692L)); assertThat(r.getItemId(), equalTo(483L)); assertThat(r.getValue(), equalTo(3.5)); assertThat(r.getTimestamp(), equalTo(349702L)); } }
@Test public void testWithMissingAttribute() { Rating r = Rating.newBuilder() .setId(42) .setUserId(100) .setItemId(50) .setRating(3.5) .build(); EntityCollection ec = EntityCollection.newBuilder(CommonTypes.RATING, Rating.ATTRIBUTES) .add(r) .build(); assertThat(ec, contains(r)); } }
@Override public Rating next() { long id = ids.next(); while (usedIds.contains(id)) { id = ids.next(); } usedIds.add(id); RatingBuilder rb = Rating.newBuilder() .setId(id) .setUserId(userIds.next()) .setItemId(itemIds.next()) .setRating(values.next()); if (timestamps != null) { rb.setTimestamp(timestamps.next()); } return rb.build(); } }
@Before public void initialize() throws IOException { predictOutputFile = folder.newFile("predictions.csv"); List<Rating> ratings = new ArrayList<>(); Generator<Rating> rgen = LenskitGenerators.ratings(); Set<Pair<Long,Long>> used = new HashSet<>(); while (ratings.size() < RATING_COUNT) { Rating r = rgen.next(); long uid = r.getUserId() % 5; Pair<Long,Long> ui = ImmutablePair.of(uid, r.getItemId()); if (used.contains(ui)) { continue; } used.add(ui); Rating r2 = r.copyBuilder() .setUserId(r.getUserId() % 5) .build(); ratings.add(r2); } assumeThat(ratings, hasSize(RATING_COUNT)); dao = StaticDataSource.fromList(ratings).get(); LenskitConfiguration config = new LenskitConfiguration(); config.bind(ItemScorer.class).to(UserMeanItemScorer.class); config.bind(UserMeanBaseline.class, ItemScorer.class).to(ItemMeanRatingItemScorer.class); tempEval.setRebuildPeriod(1L); tempEval.setDataSource(dao); tempEval.setAlgorithm("UserMeanBaseline", config); tempEval.setOutputFile(predictOutputFile); }
@Test public void testAddEntityLayout() { EntityCollectionDAOBuilder b = EntityCollectionDAO.newBuilder(); b.addEntityLayout(Rating.ENTITY_TYPE, Rating.ATTRIBUTES); Rating r = Rating.newBuilder() .setId(42) .setUserId(100) .setItemId(50) .setRating(3.5) .setTimestamp(1034801) .build(); b.addEntity(r); EntityCollectionDAO dao = b.build(); assertThat(dao.getEntityIds(CommonTypes.RATING), contains(42L)); assertThat(dao.streamEntities(CommonTypes.RATING) .collect(Collectors.toList()), contains(r)); assertThat(dao.query(Rating.class) .get(), contains(r)); }
/** * Make a fresh rating object with no timestamp. * * @see #make(long, long, double, long) * @deprecated Use {@link Rating#create(long, long, double)}. */ @Deprecated public static Rating make(long uid, long iid, double value) { return new RatingBuilder().setUserId(uid) .setItemId(iid) .setRating(value) .build(); }
/** * Make a fresh rating event. * * @deprecated Use {@link Rating#create(long, long, double, long)} */ @Deprecated public static Rating make(long uid, long iid, double value, long ts) { return new RatingBuilder().setUserId(uid) .setItemId(iid) .setRating(value) .setTimestamp(ts) .build(); } }
public Rating rating(long uid, long iid, double rating) { return Rating.newBuilder() .setId(++entityId) .setUserId(uid) .setItemId(iid) .setRating(rating) .build(); }
public Rating rating(long uid, long iid, double rating, long timestamp) { return Rating.newBuilder() .setId(++entityId) .setUserId(uid) .setItemId(iid) .setRating(rating) .setTimestamp(timestamp) .build(); } }
/** * Constructs the wrapper using the provided model. * * @param model the model to be used to create the wrapped model */ public EventDAOWrapper(final TemporalDataModelIF<Long, Long> model) { List<Rating> events = new ArrayList<>(); RatingBuilder rb = new RatingBuilder(); for (Long u : model.getUsers()) { rb.setUserId(u); for (Long i : model.getUserItems(u)) { rb.setItemId(i); rb.setRating(model.getUserItemPreference(u, i)); Iterable<Long> timestamps = model.getUserItemTimestamps(u, i); long t = -1; if (timestamps != null) { for (Long tt : timestamps) { t = tt; break; } } rb.setTimestamp(t); events.add(rb.build()); } } wrapper = EntityCollectionDAO.create(events); }
@Override public Rating next() { long id = ids.next(); while (usedIds.contains(id)) { id = ids.next(); } usedIds.add(id); RatingBuilder rb = Rating.newBuilder() .setId(id) .setUserId(userIds.next()) .setItemId(itemIds.next()) .setRating(values.next()); if (timestamps != null) { rb.setTimestamp(timestamps.next()); } return rb.build(); } }