/** 对用户性别进行过滤 */ public static void filterGender( long uid, RecommenderBuilder recommenderBuilder, DataModel dataModel, String gender) throws TasteException, IOException { Set<Long> userids = getByGender("datafile/book/user.csv", gender); // 计算指定性别用户打分过的图书 Set<Long> bookids = new HashSet<Long>(); for (long uids : userids) { LongPrimitiveIterator iter = dataModel.getItemIDsFromUser(uids).iterator(); while (iter.hasNext()) { long bookid = iter.next(); bookids.add(bookid); } } IDRescorer rescorer = new FilterRescorer(bookids); List<RecommendedItem> list = recommenderBuilder.buildRecommender(dataModel).recommend(uid, RECOMMENDER_NUM, rescorer); RecommendFactory.showItems(uid, list, false); }
public static void main(String[] args) throws TasteException, IOException { long uid = 198; // 65 String gender = "F"; // "M" String file = "datafile/book/rating.csv"; String fileF = filterRatingDataByUserGender(file, gender); DataModel dataModel = RecommendFactory.buildDataModel(fileF); RecommenderBuilder rb1 = BookEvaluator.userEuclidean(dataModel); RecommenderBuilder rb2 = BookEvaluator.itemEuclidean(dataModel); RecommenderBuilder rb3 = BookEvaluator.userEuclideanNoPref(dataModel); RecommenderBuilder rb4 = BookEvaluator.itemEuclideanNoPref(dataModel); System.out.print("userEuclidean =>"); filterGender(uid, rb1, dataModel, gender); System.out.print("itemEuclidean =>"); filterGender(uid, rb2, dataModel, gender); System.out.print("userEuclideanNoPref =>"); filterGender(uid, rb3, dataModel, gender); System.out.print("itemEuclideanNoPref =>"); filterGender(uid, rb4, dataModel, gender); }