Search in sources :

Example 1 with GenericBooleanPrefItemBasedRecommender

use of org.apache.mahout.cf.taste.impl.recommender.GenericBooleanPrefItemBasedRecommender in project facebook-recommender-demo by ManuelB.

the class FacebookRecommender method initRecommender.

/**
	 * This function will init the recommender
	 * it will load the CSV file from the resource folder,
	 * parse it and create the necessary data structures
	 * to create a recommender.
	 * The 
	 */
@PostConstruct
public void initRecommender() {
    try {
        // get the file which is part of the WAR as
        URL url = getClass().getClassLoader().getResource(DATA_FILE_NAME);
        // create a file out of the resource
        File data = new File(url.toURI());
        // create a map for saving the preferences (likes) for
        // a certain person
        Map<Long, List<Preference>> preferecesOfUsers = new HashMap<Long, List<Preference>>();
        // use a CSV parser for reading the file
        // use UTF-8 as character set
        CSVParser parser = new CSVParser(new InputStreamReader(new FileInputStream(data), "UTF-8"));
        // parse out the header
        // we are not using the header
        String[] header = parser.getLine();
        // should output person name
        log.fine(header[0] + " " + header[1]);
        String[] line;
        // go through every line
        while ((line = parser.getLine()) != null) {
            String person = line[0];
            String likeName = line[1];
            // other lines contained but not used
            // String category = line[2];
            // String id = line[3];
            // String created_time = line[4];
            // create a long from the person name
            long userLong = thing2long.toLongID(person);
            // store the mapping for the user
            thing2long.storeMapping(userLong, person);
            // create a long from the like name
            long itemLong = thing2long.toLongID(likeName);
            // store the mapping for the item
            thing2long.storeMapping(itemLong, likeName);
            List<Preference> userPrefList;
            // otherwise create a new one.
            if ((userPrefList = preferecesOfUsers.get(userLong)) == null) {
                userPrefList = new ArrayList<Preference>();
                preferecesOfUsers.put(userLong, userPrefList);
            }
            // add the like that we just found to this user
            userPrefList.add(new GenericPreference(userLong, itemLong, 1));
            log.fine("Adding " + person + "(" + userLong + ") to " + likeName + "(" + itemLong + ")");
        }
        // create the corresponding mahout data structure from the map
        FastByIDMap<PreferenceArray> preferecesOfUsersFastMap = new FastByIDMap<PreferenceArray>();
        for (Entry<Long, List<Preference>> entry : preferecesOfUsers.entrySet()) {
            preferecesOfUsersFastMap.put(entry.getKey(), new GenericUserPreferenceArray(entry.getValue()));
        }
        // create a data model 
        dataModel = new GenericDataModel(preferecesOfUsersFastMap);
        // Instantiate the recommender
        recommender = new GenericBooleanPrefItemBasedRecommender(dataModel, new LogLikelihoodSimilarity(dataModel));
    } catch (URISyntaxException e) {
        log.log(Level.SEVERE, "Problem with the file URL", e);
    } catch (FileNotFoundException e) {
        log.log(Level.SEVERE, DATA_FILE_NAME + " was not found", e);
    } catch (IOException e) {
        log.log(Level.SEVERE, "Error during reading line of file", e);
    }
}
Also used : HashMap(java.util.HashMap) GenericBooleanPrefItemBasedRecommender(org.apache.mahout.cf.taste.impl.recommender.GenericBooleanPrefItemBasedRecommender) FileNotFoundException(java.io.FileNotFoundException) URISyntaxException(java.net.URISyntaxException) URL(java.net.URL) GenericUserPreferenceArray(org.apache.mahout.cf.taste.impl.model.GenericUserPreferenceArray) GenericPreference(org.apache.mahout.cf.taste.impl.model.GenericPreference) ArrayList(java.util.ArrayList) List(java.util.List) InputStreamReader(java.io.InputStreamReader) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) FastByIDMap(org.apache.mahout.cf.taste.impl.common.FastByIDMap) PreferenceArray(org.apache.mahout.cf.taste.model.PreferenceArray) GenericUserPreferenceArray(org.apache.mahout.cf.taste.impl.model.GenericUserPreferenceArray) GenericDataModel(org.apache.mahout.cf.taste.impl.model.GenericDataModel) Preference(org.apache.mahout.cf.taste.model.Preference) GenericPreference(org.apache.mahout.cf.taste.impl.model.GenericPreference) LogLikelihoodSimilarity(org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity) CSVParser(org.apache.commons.csv.CSVParser) File(java.io.File) PostConstruct(javax.annotation.PostConstruct)

Aggregations

File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 InputStreamReader (java.io.InputStreamReader)1 URISyntaxException (java.net.URISyntaxException)1 URL (java.net.URL)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 PostConstruct (javax.annotation.PostConstruct)1 CSVParser (org.apache.commons.csv.CSVParser)1 FastByIDMap (org.apache.mahout.cf.taste.impl.common.FastByIDMap)1 GenericDataModel (org.apache.mahout.cf.taste.impl.model.GenericDataModel)1 GenericPreference (org.apache.mahout.cf.taste.impl.model.GenericPreference)1 GenericUserPreferenceArray (org.apache.mahout.cf.taste.impl.model.GenericUserPreferenceArray)1 GenericBooleanPrefItemBasedRecommender (org.apache.mahout.cf.taste.impl.recommender.GenericBooleanPrefItemBasedRecommender)1 LogLikelihoodSimilarity (org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity)1 Preference (org.apache.mahout.cf.taste.model.Preference)1 PreferenceArray (org.apache.mahout.cf.taste.model.PreferenceArray)1