zoukankan      html  css  js  c++  java
  • RecommenderFilterSalaryResult

    package org.andy.mymahout.recommendation.job;
    
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    
    import org.apache.mahout.cf.taste.common.TasteException;
    import org.apache.mahout.cf.taste.eval.RecommenderBuilder;
    import org.apache.mahout.cf.taste.impl.common.FastIDSet;
    import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
    import org.apache.mahout.cf.taste.model.DataModel;
    import org.apache.mahout.cf.taste.recommender.IDRescorer;
    import org.apache.mahout.cf.taste.recommender.RecommendedItem;
    
    
    public class RecommenderFilterSalaryResult {
    
    
        final static int NEIGHBORHOOD_NUM = 2;
        final static int RECOMMENDER_NUM = 3;
    
    
        public static void main(String[] args) throws TasteException, IOException {
            String file = "datafile/job/pv.csv";
            DataModel dataModel = RecommendFactory.buildDataModelNoPref(file);
            RecommenderBuilder rb1 = RecommenderEvaluator.userCityBlock(dataModel);
            RecommenderBuilder rb2 = RecommenderEvaluator.itemLoglikelihood(dataModel);
    
    
            Map<Long, Double> averSalary = getAverSalary("datafile/job/job.csv", dataModel);
            
            LongPrimitiveIterator iter = dataModel.getUserIDs();
            while (iter.hasNext()) {
                long uid = iter.nextLong();
                System.out.print("userCityBlock    =>");
                filterSalary(uid, rb1, dataModel, averSalary);
                System.out.print("itemLoglikelihood=>");
                filterSalary(uid, rb2, dataModel, averSalary);
            }
        }
    
    
        public static void filterSalary(long uid, RecommenderBuilder recommenderBuilder, DataModel dataModel, Map<Long, Double> averSalary) throws TasteException, IOException {
                Set<Long> jobids = getSalaryJobID(uid, "datafile/job/job.csv", averSalary);
            IDRescorer rescorer = new JobRescorer(jobids);
            List<RecommendedItem> list = recommenderBuilder.buildRecommender(dataModel).recommend(uid, RECOMMENDER_NUM, rescorer);
            RecommendFactory.showItems(uid, list, false);
        }
    
    
        public static Set<Long> getSalaryJobID(long uid, String file, Map<Long, Double> averSalary) throws IOException {
            BufferedReader br = new BufferedReader(new FileReader(new File(file)));
            Set<Long> jobids = new HashSet<Long>();
            String s = null;
            while ((s = br.readLine()) != null) {
                    String[] cols = s.split(",");
                    double salary = Double.valueOf(cols[2]);
                    if (salary < averSalary.get(uid)) {
                            jobids.add(Long.parseLong(cols[0]));
                    }
            }
            br.close();
            return jobids;
        }
        
        // 获取每个用户的基准比较工资:aver(浏览过的工资)*0.8
        public static Map<Long, Double> getAverSalary(String file, DataModel dataModel) 
                                throws NumberFormatException, IOException, TasteException{
                Map<Long, Double> salaries = new HashMap<Long, Double>();
                BufferedReader br = new BufferedReader(new FileReader(new File(file)));
            String s = null;
            while ((s = br.readLine()) != null) {
                    String[] cols = s.split(",");
                    salaries.put(Long.parseLong(cols[0]), Double.valueOf(cols[2]));
            }
            br.close();
    
    
                Map<Long, Double> averSalaries = new HashMap<Long, Double>();
                LongPrimitiveIterator iter = dataModel.getUserIDs();
                while (iter.hasNext()) {
                long uid = iter.nextLong();
                FastIDSet items = dataModel.getItemIDsFromUser(uid);
                LongPrimitiveIterator itemsIter = items.iterator();
                double sum = 0;
                int count = 0;
                double aver = 0.0;
                while (itemsIter.hasNext()) {
                    long item = itemsIter.nextLong();
                    double salary = salaries.get(item);
                    sum += salary;
                    count ++;
                }
                if(count > 0) aver = 0.8*sum/count;
                averSalaries.put(uid, aver);
                }
                return averSalaries;
        }
    
    
    }

  • 相关阅读:
    Asp.net弹出浏览器客户端确认对话框代码 Carlwave
    VS 2005 与SQL Server 2005整合优势在哪里?(from csdn.net) Carlwave
    如何让搜索引擎收录我的站点 Carlwave
    超强扩展性的DNNDotNetNuke模块功能分类列表(from 中国DNN) Carlwave
    DotNetNuke命名空间概述 Carlwave
    Most Popular Questions and Answers on ASP.NET Whidbey(from asp.net forums,write by ASP.NET Team) Carlwave
    火箭官方宣告麦蒂缺阵五周 季后赛前景蒙上阴影 Carlwave
    asp.net有效使用缓存(转) Carlwave
    《Business Rules Engine Overview》《业务规则引擎概述》write by Mark Kamoski Carlwave
    中国详细省市县自治区名称列表(含access数据库和sql2000备份数据库) Carlwave
  • 原文地址:https://www.cnblogs.com/jamesf/p/4751592.html
Copyright © 2011-2022 走看看