List of usage examples for org.apache.mahout.cf.taste.recommender RecommendedItem getValue
float getValue();
A value expressing the strength of the preference for the recommended item.
From source file:ContentBasedRecommender.java
License:Apache License
/** * Method the creates a list of recommendations. * Already rated stories are excluded, as are stories present in the front end array if add="true" * /* w w w . ja v a2s . c om*/ * @throws TasteException thrown if there if something went wrong with Mahout */ public void runContentBasedRecommender() throws TasteException { /*Find out where this file is located*/ try { fileLocation = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()); } catch (URISyntaxException e) { e.printStackTrace(); } /*"content"+userId is the name of the view we shall create*/ conn.setConnection(); /*Create a temporary view the includes all preferences values for this user*/ conn.createView((int) userId); /*Sets the dataModel based on the data in the created view*/ conn.setDataModel(); DataModel model = conn.getDataModel(); /*Gets all the info from the similarites.csv file into a list of objects accepted by Mahout*/ Collection<ItemItemSimilarity> sim = getStorySimilarities(); /*GenericItemBasedRecommender need an ItemSimilarity-object as input, so create an instance of this class.*/ ItemSimilarity similarity = new GenericItemSimilarity(sim); /*Create a new Recommender-instance with our datamodel and story similarities*/ GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(model, similarity); /* Compute the recommendations. model.getNumItems() is the number of recommendations we want (we don't really want that many, * but we don't know how many of the top items the user already have rated), don't worry about the null, * and true tells the recommender that we want to include already known items*/ List<RecommendedItem> recommendations = recommender.recommend(userId, model.getNumItems(), null, true); /*Find the stories that the user have rated*/ HashMap<Integer, Integer> ratedStories = conn.getRated((int) userId); ArrayList<Integer> frontendStories = new ArrayList<>(); /* Find the stories already present in the recommendations list at front end * These stories should not be recommended again*/ if (add.equals("true")) { frontendStories = conn.getStoriesInFrontendArray((int) userId); } int ranking = 1; Random rand = new Random(); int randomDislikedRanking = rand.nextInt(6) + 5; ArrayList<DatabaseInsertObject> itemsToBeInserted = new ArrayList<>(); ArrayList<Long> idsToBeInserted = new ArrayList<>(); for (RecommendedItem recommendation : recommendations) { /* To get a story outside of the users preferences, finds the least recommended story */ if (randomDislikedRanking == ranking) { /*Make sure the false recommendation is not already in the front end array or already among the top ten recommendation (may happen if the user doesn't have many not seen/not rated stories left) */ for (int i = 1; i < recommendations.size(); i++) { long dislikedStoryId = recommendations.get(recommendations.size() - i).getItemID(); if (!frontendStories.contains((int) dislikedStoryId) && !idsToBeInserted.contains(dislikedStoryId) && ratedStories.get((int) dislikedStoryId) == null) { itemsToBeInserted.add(new DatabaseInsertObject((int) userId, "DF." + dislikedStoryId, "FalseRecommendation", 1, 0, ranking, recommendations.get(recommendations.size() - i).getValue())); idsToBeInserted.add(dislikedStoryId); System.out.print("False recommend: "); System.out.println(dislikedStoryId); break; } } ranking++; if (ranking > 10) { break; } continue; } /*If the item has not been rated,is not already in the recommendation list at front end or already a false recommendation we insert it*/ if ((ratedStories.get((int) recommendation.getItemID()) == null) && !frontendStories.contains((int) recommendation.getItemID()) && !idsToBeInserted.contains(recommendation.getItemID())) { /*Get the 30 items that had most influence on the recommendation*/ List<RecommendedItem> becauseItems = recommender.recommendedBecause(userId, recommendation.getItemID(), 30); int counter = 1; ArrayList<RecommendedItem> explanationItems = new ArrayList<>(); for (RecommendedItem because : becauseItems) { /*Add story to explanation if this story has been rated and the rating is good*/ if (!explanationItems.contains(because) && ratedStories.get((int) because.getItemID()) != null && ratedStories.get((int) because.getItemID()) > 2) { explanationItems.add(because); counter++; } if (counter > 3) { break; } } /*Gets the titles of the explanation-stories and creates a string*/ String explanation = conn.createExplanation(explanationItems); itemsToBeInserted.add(new DatabaseInsertObject((int) userId, "DF." + recommendation.getItemID(), explanation, 0, 0, ranking, recommendation.getValue())); idsToBeInserted.add(recommendation.getItemID()); System.out.println(recommendation); ranking++; } /*When we got 10 new recommendations, we're happy*/ if (ranking > 10) { break; } } this.recommendations = recommendations; /*Delete the current recommendations stored in stored_story that has not been seen by the user*/ conn.deleteRecommendations((int) userId); /*Insert the 10 items we found*/ conn.insertUpdateRecommendValues(itemsToBeInserted); /*Drop our temporary view*/ conn.dropView(); conn.closeConnection(); }
From source file:be.ugent.tiwi.sleroux.newsrec.newsreccollaborativefiltering.App.java
public static void main(String[] args) throws DaoException, IOException, TasteException { IRatingsDao ratingsDao = new JDBCRatingsDao(); MahoutDataFileWriter fileWriter = new MahoutDataFileWriter(ratingsDao, mahoutInputFile); String[] ids = fileWriter.writeOutputFile(); MahoutTermRecommender recommender = new MahoutTermRecommender(mahoutInputFile); Map<Long, List<RecommendedItem>> recommendations = recommender.makeRecommendations(10); for (Long user : recommendations.keySet()) { List<RecommendedItem> items = recommendations.get(user); System.out.println(user); for (RecommendedItem item : items) { System.out.println(ids[(int) item.getItemID()] + "\t" + item.getValue()); }// w ww .j a v a2 s . c o m System.out.println(""); } RecommendationsToDatabase r2db = new RecommendationsToDatabase(ratingsDao); r2db.store(ids, recommendations); }
From source file:be.ugent.tiwi.sleroux.newsrec.newsreccollaborativefiltering.RecommendationsToDatabase.java
public void store(String[] terms, Map<Long, List<RecommendedItem>> recommendations) throws RatingsDaoException { for (Long user : recommendations.keySet()) { List<RecommendedItem> items = recommendations.get(user); if (items.size() > 0) { Map<String, Double> scoreMap = new HashMap<>(); for (RecommendedItem item : items) { String term = terms[(int) item.getItemID()]; double score = item.getValue(); scoreMap.put(term, score); }/*from w ww . j a v a 2s. c om*/ ratingsDao.giveRating(user, scoreMap); } } }
From source file:businessreco.BusinessReco.java
public static void main(String args[]) { try {/*from ww w .j a v a 2 s .c om*/ //Loading the DATA; DataModel dm = new FileDataModel(new File( "C:\\Users\\bryce\\Course Work\\3. Full Summer\\Big Data\\Final Project\\Yelp\\FINAL CODE\\Mahout\\data\\busirec_new.csv")); // We use the below line to relate businesses. //ItemSimilarity sim = new LogLikelihoodSimilarity(dm); TanimotoCoefficientSimilarity sim = new TanimotoCoefficientSimilarity((dm)); //Using the below line get recommendations GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm, sim); //Looping through every business. for (LongPrimitiveIterator items = dm.getItemIDs(); items.hasNext();) { long itemId = items.nextLong(); // For each business we recommend 3 businesses. List<RecommendedItem> recommendations = recommender.mostSimilarItems(itemId, 2); for (RecommendedItem recommendation : recommendations) { System.out.println(itemId + "," + recommendation.getItemID() + "," + recommendation.getValue()); } } } catch (IOException | TasteException e) { System.out.println(e); } }
From source file:com.anjuke.romar.http.rest.BaseResource.java
License:Apache License
List<Object> wrapRecommendItem(RecommendResultResponse recommendResponse) { List<RecommendedItem> list = recommendResponse.getList(); List<Object> result = new ArrayList<Object>(); for (RecommendedItem item : list) { if (_allowItemStringID) { RecommendStringBean bean = new RecommendStringBean(); bean.setItem(getItemString(item.getItemID())); bean.setValue(item.getValue()); result.add(bean);// www .j a va2 s . c o m } else { RecommendBean bean = new RecommendBean(); bean.setItem(item.getItemID()); bean.setValue(item.getValue()); result.add(bean); } } return result; }
From source file:com.mashup.resys.recommender.ByValueRecommendedItemComparator.java
License:Apache License
@Override public int compare(RecommendedItem o1, RecommendedItem o2) { float value1 = o1.getValue(); float value2 = o2.getValue(); return value1 > value2 ? -1 : value1 < value2 ? 1 : 0; }
From source file:com.msiiplab.recsys.rwr.GLRecommenderIRStatsEvaluator.java
License:Apache License
protected PreferenceArray getPreferenceArray(List<RecommendedItem> recommendedItems, long userID) { ArrayList<Preference> userPredictionArray = new ArrayList<Preference>(); for (int i = 0; i < recommendedItems.size(); i++) { RecommendedItem item = recommendedItems.get(i); userPredictionArray.add(new GenericPreference(userID, item.getItemID(), item.getValue())); }/* w w w . j a v a 2 s. c o m*/ PreferenceArray userPredictions = new GenericUserPreferenceArray(userPredictionArray); userPredictions.sortByValueReversed(); return userPredictions; }
From source file:com.mykidscart.mahout_service.RecommenderServlet.java
License:Apache License
private static void writeXML(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException { response.setContentType("application/xml"); response.setCharacterEncoding("UTF-8"); response.setHeader("Cache-Control", "no-cache"); PrintWriter writer = response.getWriter(); writer.print("<?xml version=\"1.0\" encoding=\"UTF-8\"?><recommendedItems>"); for (RecommendedItem recommendedItem : items) { writer.print("<item><value>"); writer.print(recommendedItem.getValue()); writer.print("</value><id>"); writer.print(recommendedItem.getItemID()); writer.print("</id></item>"); }//from ww w .ja v a2s . com writer.println("</recommendedItems>"); }
From source file:com.mykidscart.mahout_service.RecommenderServlet.java
License:Apache License
private static void writeJSON(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException { response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.setHeader("Cache-Control", "no-cache"); PrintWriter writer = response.getWriter(); writer.print("{\"recommendedItems\":{\"item\":["); for (RecommendedItem recommendedItem : items) { writer.print("{\"value\":\""); writer.print(recommendedItem.getValue()); writer.print("\",\"id\":\""); writer.print(recommendedItem.getItemID()); writer.print("\"},"); }// w w w . ja v a2 s . co m writer.println("]}}"); }
From source file:com.mykidscart.mahout_service.RecommenderServlet.java
License:Apache License
private static void writeRecommendations(Iterable<RecommendedItem> items, PrintWriter writer) { for (RecommendedItem recommendedItem : items) { writer.print(recommendedItem.getValue()); writer.print('\t'); writer.println(recommendedItem.getItemID()); }/* w ww . j av a2s . com*/ }