Example usage for org.apache.mahout.cf.taste.recommender Recommender recommend

List of usage examples for org.apache.mahout.cf.taste.recommender Recommender recommend

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.recommender Recommender recommend.

Prototype

List<RecommendedItem> recommend(long userID, int howMany) throws TasteException;

Source Link

Usage

From source file:be.ugent.tiwi.sleroux.newsrec.newsreccollaborativefiltering.MahoutTermRecommender.java

public Map<Long, List<RecommendedItem>> makeRecommendations(int n) throws IOException, TasteException {

    DataModel model = new FileDataModel(new File(mahoutInputFile), ";");
    UserSimilarity similarity = new TanimotoCoefficientSimilarity(model);
    UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model);
    Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

    LongPrimitiveIterator it = model.getUserIDs();
    Map<Long, List<RecommendedItem>> output = new HashMap<>(model.getNumUsers());

    while (it.hasNext()) {
        long user = it.nextLong();
        List<RecommendedItem> items = recommender.recommend(user, n);
        output.put(user, items);//from   w  w  w  .  jav a2  s.co m
    }

    return output;
}

From source file:cf.wikipedia.WikipediaTasteUserDemo.java

License:Apache License

public static void main(String[] args)
        throws IOException, TasteException, SAXException, ParserConfigurationException {
    String recsFile = args[0];/*from  w w  w  .  j  av a2  s  .  c  o  m*/
    String docIdsTitle = args[1];
    Integer neighborhoodSize = Integer.parseInt(args[2]);
    Long userId = Long.parseLong(args[3]);
    boolean printCommonalities = Boolean.parseBoolean(args[4]);
    InputSource is = new InputSource(new FileInputStream(docIdsTitle));
    SAXParserFactory factory = SAXParserFactory.newInstance();
    factory.setValidating(false);
    SAXParser sp = factory.newSAXParser();
    WikiContentHandler handler = new WikiContentHandler();
    sp.parse(is, handler);
    //create the data model
    FileDataModel dataModel = new FileDataModel(new File(recsFile));
    System.out.println("Data Model: Users: " + dataModel.getNumUsers() + " Items: " + dataModel.getNumItems());

    UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(dataModel);
    // Optional:
    userSimilarity.setPreferenceInferrer(new AveragingPreferenceInferrer(dataModel));
    //Get a neighborhood of users
    UserNeighborhood neighborhood = new NearestNUserNeighborhood(neighborhoodSize, userSimilarity, dataModel);
    //Create the recommender
    Recommender recommender = new GenericUserBasedRecommender(dataModel, neighborhood, userSimilarity);
    System.out.println("-----");
    System.out.println("User: " + userId);
    //Print out the users own preferences first
    TasteUtils.printPreferences(dataModel, userId, handler.map);
    if (printCommonalities) {
        long[] users = neighborhood.getUserNeighborhood(userId);
        for (int i = 0; i < users.length; i++) {
            long neighbor = users[i];
            System.out.println("Neighbor: " + neighbor);
            TasteUtils.printCommonalities(dataModel, userId, neighbor, handler.map);
        }

        System.out.println("");
    }
    //Get the top 5 recommendations
    List<RecommendedItem> recommendations = recommender.recommend(userId, 5);
    TasteUtils.printRecs(recommendations, handler.map);
}

From source file:com.aguin.stock.recommender.StockRecommender.java

License:Apache License

public static void run(DataModel model, Recommender rec) throws TasteException {
    if (!(model instanceof MongoDBDataModel)) {
        throw new ClassCastException("Data Model must be a-Mongo!");
    }// w ww . jav  a2  s . c  o  m
    MongoDBDataModel mgmodel = (MongoDBDataModel) model;
    System.out.println("Start recommender\n");
    LongPrimitiveIterator it = mgmodel.getUserIDs();
    while (it.hasNext()) {
        long userId = it.nextLong();

        // get the recommendations for the user
        List<RecommendedItem> recommendations = rec.recommend(userId, 10);

        // if empty write something
        if (recommendations.size() == 0) {
            System.out.print("User ");
            System.out.print(mgmodel.fromLongToId(userId));
            System.out.println(": no recommendations");
        }

        // print the list of recommendations for each 
        for (RecommendedItem recommendedItem : recommendations) {
            System.out.print("User ");
            System.out.print(mgmodel.fromLongToId(userId));
            System.out.print(": ");
            System.out.println(recommendedItem);
        }
    }
}

From source file:com.corchado.testRecomender.recomendador.java

public static void Recomendar(Scanner entrada, DataModel model, final UserSimilarity similarity)
        throws IOException, TasteException {
    //        obtener los parametros del usuario
    int idUsuario;
    System.out.println("Entre el id de usuario");
    idUsuario = entrada.nextInt();/*w  w  w  .ja v a2s. co  m*/

    System.out.println("Entre la cantidad de recomendaciones");
    int cantRecomendaciones;
    cantRecomendaciones = entrada.nextInt();
    //------------------------------------------
    //recomendador

    UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model);

    Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
    //parametros:
    //usuario al que se recomdienda
    //cantidad de items a recomendar 
    List<RecommendedItem> recommendations = recommender.recommend(idUsuario, cantRecomendaciones);

    System.out.println("Items recomendados: ");
    for (RecommendedItem recommendation : recommendations) {
        System.out.println(recommendation);

    }

}

From source file:com.corchado.testRecomender.recomendarUI.java

private void btnRecomendarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRecomendarActionPerformed
    try {/*from  w  ww .ja v a 2s  .c o m*/
        // TODO add your handling code here:
        int numeroUsuario = Integer.parseInt(SpinnerNumeroUsuario.getValue().toString());
        int cantRecomendaciones = Integer.parseInt(SpinnerCantRecomendacion.getValue().toString());

        //recomendador
        UserNeighborhood neighborhood = new NearestNUserNeighborhood(CantVecindad, similarity, model);
        Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
        List<RecommendedItem> recommendations = recommender.recommend(numeroUsuario, cantRecomendaciones);

        listRecomendaciones.removeAll();
        if (recommendations.isEmpty()) {
            listRecomendaciones.add("no se encontraron recomendaciones");
        } else {
            for (RecommendedItem recommendation : recommendations) {
                listRecomendaciones.add(recommendation.toString());
            }
        }
    } catch (TasteException ex) {
        Logger.getLogger(recomendarUI.class.getName()).log(Level.SEVERE, null, ex);
    }
}

From source file:com.mycompany.xplor_recommendation_engine.Xplor.java

/**
 * @param args the command line arguments
 * @throws java.sql.SQLException//from ww  w .  j  ava2 s. com
 * @throws java.io.IOException
 */
public static void main(String[] args) throws SQLException, IOException, TasteException {

    FileConverter fc = FileConverter.getFileConverter();
    int[] columnSpecs = new int[2];
    columnSpecs[0] = 2;
    columnSpecs[1] = 2;
    fc.convertToCSV("xplor_development", "blog_profile_maps", columnSpecs);

    // Calibrate recommender for csv file
    DataModel model = new FileDataModel(new File("blog_profile_maps.csv"));
    UserSimilarity similarity = new TanimotoCoefficientSimilarity(model);
    UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
    Recommender recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity);
    Recommender cachingRecommender = new CachingRecommender(recommender);

    // Establish JDBC connection

    for (int i = 1; i <= model.getNumUsers(); i++) {
        List<RecommendedItem> recommendations = cachingRecommender.recommend(i, 10);
        for (RecommendedItem recommendation : recommendations) {
            // Store recommendations in recommendations table
        }
    }

    // Store recommendations in database
}

From source file:lsdr.user.based.recommender.intro.trivial.RecommenderIntro.java

License:Open Source License

public List<RecommendedItem> recommend(int id, int amount) throws Exception {
    // TODO as fields, then only id and amount is changed
    final UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
    final UserNeighborhood neighborhood = new NearestNUserNeighborhood(AMOUNT_OF_NEIGHBORS, similarity, model);
    final Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

    List<RecommendedItem> recommendations = recommender.recommend(id, amount);

    return recommendations;
}

From source file:lsh.mahout.recommender.LSHDataModelTest.java

License:Apache License

@Test
public void testFile() throws Exception {
    UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(model);
    UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, userSimilarity, model);
    Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, userSimilarity);
    assertEquals(1, recommender.recommend(1, 3).size());
    assertEquals(0, recommender.recommend(10, 3).size());
    assertEquals(1, recommender.recommend(100, 3).size());

    // Make sure this doesn't throw an exception
    model.refresh(null);/*from w  w  w .j ava2  s. c  o  m*/
}

From source file:net.recommenders.rival.examples.movielens100k.IterativeCrossValidatedMahoutKNNRecommenderEvaluator.java

License:Apache License

/**
 * Recommends using an UB algorithm.//  w  w  w  .ja  va  2 s  .  co m
 *
 * @param nFolds number of folds
 * @param inPath path where training and test models have been stored
 * @param outPath path where recommendation files will be stored
 */
public static void recommend(final int nFolds, final String inPath, final String outPath) {
    for (int i = 0; i < nFolds; i++) {
        org.apache.mahout.cf.taste.model.DataModel trainModel;
        org.apache.mahout.cf.taste.model.DataModel testModel;
        try {
            trainModel = new FileDataModel(new File(inPath + "train_" + i + ".csv"));
            testModel = new FileDataModel(new File(inPath + "test_" + i + ".csv"));
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        GenericRecommenderBuilder grb = new GenericRecommenderBuilder();
        String recommenderClass = "org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender";
        String similarityClass = "org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity";
        int neighborhoodSize = NEIGH_SIZE;
        Recommender recommender = null;
        try {
            recommender = grb.buildRecommender(trainModel, recommenderClass, similarityClass, neighborhoodSize);
        } catch (RecommenderException e) {
            e.printStackTrace();
        }

        String fileName = "recs_" + i + ".csv";

        LongPrimitiveIterator users;
        try {
            users = testModel.getUserIDs();
            boolean createFile = true;
            while (users.hasNext()) {
                long u = users.nextLong();
                assert recommender != null;
                List<RecommendedItem> items = recommender.recommend(u, trainModel.getNumItems());
                RecommenderIO.writeData(u, items, outPath, fileName, !createFile, null);
                createFile = false;
            }
        } catch (TasteException e) {
            e.printStackTrace();
        }
    }
}

From source file:net.recommenders.rival.examples.movielens100k.RandomSplitMahoutKNNRecommenderEvaluator.java

License:Apache License

/**
 * Recommends using an UB algorithm.// w w  w.  ja va2s  .  c o  m
 *
 * @param inPath path where training and test models have been stored
 * @param outPath path where recommendation files will be stored
 */
public static void recommend(final String inPath, final String outPath) {
    int i = 0;
    org.apache.mahout.cf.taste.model.DataModel trainModel = null;
    org.apache.mahout.cf.taste.model.DataModel testModel = null;
    try {
        trainModel = new FileDataModel(new File(inPath + "train_" + i + ".csv"));
        testModel = new FileDataModel(new File(inPath + "test_" + i + ".csv"));
    } catch (IOException e) {
        e.printStackTrace();
        return;
    }

    GenericRecommenderBuilder grb = new GenericRecommenderBuilder();
    String recommenderClass = "org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender";
    String similarityClass = "org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity";
    int neighborhoodSize = NEIGH_SIZE;
    Recommender recommender = null;
    try {
        recommender = grb.buildRecommender(trainModel, recommenderClass, similarityClass, neighborhoodSize);
    } catch (RecommenderException e) {
        e.printStackTrace();
    }

    String fileName = "recs_" + i + ".csv";

    LongPrimitiveIterator users = null;
    try {
        users = testModel.getUserIDs();
        boolean createFile = true;
        while (users.hasNext()) {
            long u = users.nextLong();
            List<RecommendedItem> items = recommender.recommend(u, trainModel.getNumItems());
            RecommenderIO.writeData(u, items, outPath, fileName, !createFile, null);
            createFile = false;
        }
    } catch (TasteException e) {
        e.printStackTrace();
    }
}