package com.datamine.CollaborativeFiltering.mysql;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import java.util.ArrayList;
import java.util.List;
public class ItemRecommender extends RecommenderBase {
public static ArrayList<Integer> recommend(long uid, int count) throws Exception {
DataModel dataModel = getDataModel();
UserSimilarity userSimilarity = new EuclideanDistanceSimilarity(dataModel);
UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(3, userSimilarity, dataModel);
UserBasedRecommender userBasedRecommender = new GenericUserBasedRecommender(dataModel, userNeighborhood, userSimilarity);
List<RecommendedItem> recommendations = userBasedRecommender.recommend(uid, count);
ArrayList<Integer> list = new ArrayList<>();
for (RecommendedItem recommendation : recommendations) {
list.add((int) recommendation.getItemID());
}
return list;
}
public static void main(String[] args) {
}
}
package com.datamine.CollaborativeFiltering.mysql;
import com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.model.jdbc.MySQLJDBCDataModel;
import org.apache.mahout.cf.taste.impl.model.jdbc.ReloadFromJDBCDataModel;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.model.JDBCDataModel;
public class RecommenderBase {
public static DataModel getDataModel() throws TasteException {
MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource();
dataSource.setURL("jdbc:mysql://localhost/drupal7?user=USER&password=PASSWORD");
JDBCDataModel dm = new MySQLJDBCDataModel(dataSource, "rec_vote", "uid", "nid", "vote", null);
DataModel reloadFromJDBCDataModel = new ReloadFromJDBCDataModel(dm);
return reloadFromJDBCDataModel;
}
}
package com.datamine.CollaborativeFiltering.mysql;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
import java.util.ArrayList;
import java.util.List;
public class SimilarityRecommender extends RecommenderBase {
public static ArrayList<Integer> recommend(long nid, int count) throws TasteException {
DataModel dataModel = getDataModel();
ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(dataModel);
GenericItemBasedRecommender genericItemBasedRecommender = new GenericItemBasedRecommender(dataModel, itemSimilarity);
List<RecommendedItem> recommendations = genericItemBasedRecommender.mostSimilarItems(nid, count);
ArrayList<Integer>list = new ArrayList<>();
for (RecommendedItem recommendation : recommendations) {
list.add((int) recommendation.getItemID());
}
return list;
}
}
package com.datamine.CollaborativeFiltering;
import java.io.File;
import java.util.List;
import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
/**
* 基于物品的协同过滤
* @author Administrator
*
*/
public class ItemCF2 {
final static int RECOMMENDER_NUM = 3; //推荐物品数目
public static void main(String[] args) throws Exception {
File file = new File("data/CF.data");
//构造数据模型
DataModel model = new FileDataModel(file);
//使用皮尔松算法 计算内容之间的相似度
ItemSimilarity itemSimilarity = new PearsonCorrelationSimilarity(model);
//构造推荐引擎 基于物品的推荐
GenericItemBasedRecommender r = new GenericItemBasedRecommender(model, itemSimilarity);
//迭代获取用户的id
//获得推荐结果,给userID推荐howMany个Item
List<RecommendedItem> list = r.mostSimilarItems(1580, RECOMMENDER_NUM);
for(RecommendedItem items : list){
System.out.printf("(%s,%f)",items.getItemID(),items.getValue());
}
System.out.println();
}
}