Package com.enigmastation.recommendations.item

Source Code of com.enigmastation.recommendations.item.RecommendationImpl

package com.enigmastation.recommendations.item;

import com.enigmastation.collections.NestedDictionaryStringStringDouble;
import com.enigmastation.recommendations.Recommendation;
import com.enigmastation.collections.Tuple;
import javolution.util.FastList;
import javolution.util.FastMap;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

/**
* RecommendationImpl
*/
public abstract class RecommendationImpl implements Recommendation {
    protected List<Object> getMatchingEntriesList(NestedDictionaryStringStringDouble dict, Object key1, Object key2) {
        List<Object> si = new FastList<Object>();
        for (Object subKey : dict.get(key1).keySet()) {
            if (dict.get(key2).containsKey(subKey)) {
                si.add(subKey);
            }
        }
        return si;
    }

    public List<Tuple> getTopMatches(NestedDictionaryStringStringDouble dict, Object match) {
        return getTopMatches(dict, match, 3);
    }

    public List<Tuple> getTopMatches(NestedDictionaryStringStringDouble dict, Object person, int matches) {
        List<Tuple> scores = new FastList<Tuple>();
        for (Object other : dict.keySet()) {
            if (!other.equals(person)) {
                Tuple t = new Tuple(other, this.getDistance(dict, other, person));
                //System.out.println(t);
                scores.add(t);
            }
        }
        Collections.sort(scores, new Comparator<Tuple>() {
            public int compare(Tuple o1, Tuple o2) {
                if (o1.getValue() > o2.getValue()) {
                    return -1;
                }
                if (o1.getValue() < o2.getValue()) {
                    return 1;
                }
                return 0//To change body of implemented methods use File | Settings | File Templates.
            }
        });
        return scores.subList(0, matches);
    }

    public List<Tuple> getRecommendations(NestedDictionaryStringStringDouble dict, Object person) {
        Map<Object, Double> totals = new FastMap<Object, Double>();
        Map<Object, Double> simSums = new FastMap<Object, Double>();
        for (Object other : dict.keySet()) {
            if (!other.equals(person)) {
                double sim = this.getDistance(dict, person, other);

                if (sim >= 0) {
                    for (Object item : dict.get(other).keySet()) {
                        if (!dict.get(person).containsKey(item) ||
                                dict.get(person).get(item) == 0.0) {
                            if (!totals.containsKey(item)) {
                                totals.put(item, 0.0);
                            }
                            totals.put(item, totals.get(item) + dict.get(other).get(item) * sim);
                            if (!simSums.containsKey(item)) {
                                simSums.put(item, 0.0);
                            }
                            simSums.put(item, simSums.get(item) + sim);
                        }
                    }
                }
            }
        }
        List<Tuple> rankings = new FastList<Tuple>();
        for (Object item : totals.keySet()) {
            double d = totals.get(item) / simSums.get(item);
            rankings.add(new Tuple(item, d));
        }
        Collections.sort(rankings, new Comparator<Tuple>() {
            public int compare(Tuple o1, Tuple o2) {
                if (o1.getValue() > o2.getValue()) {
                    return -1;
                }
                if (o1.getValue() < o2.getValue()) {
                    return 1;
                }
                return 0//To change body of implemented methods use File | Settings | File Templates.
            }
        });
        return rankings;
    }
}
TOP

Related Classes of com.enigmastation.recommendations.item.RecommendationImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.