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;
        }
    
    
    }

  • 相关阅读:
    【Nginx】ngx_event_core_module模块
    ELMAH--Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components 77 out of 90 rated th
    nyist oj 214 单调递增子序列(二) (动态规划经典)
    java 入门书籍(java7)
    ARCGIS将WGS84坐标投影到高斯平面
    【linux】linux下对java程序生成dump文件,并使用IBM Heap Analyzer进行分析,查找定位内存泄漏的问题代码
    【springboot】【socket】spring boot整合socket,实现服务器端两种消息推送
    【linux】linux修改open file 大小
    【docker】docker限制日志文件大小的方法+查看日志文件的方法
    【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志
  • 原文地址:https://www.cnblogs.com/jamesf/p/4751592.html
Copyright © 2011-2022 走看看