List of usage examples for com.google.common.collect Ordering greatestOf
public <E extends T> List<E> greatestOf(Iterator<E> iterator, int k)
From source file:org.grouplens.samantha.server.ranker.FieldBlendingRanker.java
public RankedResult rank(RetrievedResult retrievedResult, RequestContext requestContext) { List<ObjectNode> entityList = retrievedResult.getEntityList(); for (EntityExpander expander : entityExpanders) { entityList = expander.expand(entityList, requestContext); }//from w w w .j a v a 2s . co m int curLimit = limit; if (pageSize == 0 || limit > entityList.size()) { curLimit = entityList.size(); } Object2DoubleMap<String> field2min = new Object2DoubleOpenHashMap<>(defaults.size()); Object2DoubleMap<String> field2max = new Object2DoubleOpenHashMap<>(defaults.size()); for (Object2DoubleMap.Entry<String> entry : defaults.object2DoubleEntrySet()) { String key = entry.getKey(); for (JsonNode entity : entityList) { if (entity.has(key)) { double curVal = entity.get(key).asDouble(); double curMin = field2min.getOrDefault(key, Double.MAX_VALUE); double curMax = field2max.getOrDefault(key, Double.MIN_VALUE); if (curMin > curVal) { field2min.put(key, curVal); } if (curMax < curVal) { field2max.put(key, curVal); } } } } List<Prediction> scoredList = new ArrayList<>(entityList.size()); for (ObjectNode entity : entityList) { double score = 0.0; for (Object2DoubleMap.Entry<String> entry : defaults.object2DoubleEntrySet()) { String key = entry.getKey(); if (entity.has(key)) { double min = field2min.getDouble(key); double max = field2max.getDouble(key); double val = (min == max) ? 0.0 : (entity.get(key).asDouble() - min) / (max - min); score += (entry.getDoubleValue() * val); } } scoredList.add(new Prediction(entity, null, score)); } Ordering<Prediction> ordering = RankerUtilities.scoredResultScoreOrdering(); List<Prediction> candidates = ordering.greatestOf(scoredList, offset + curLimit); List<Prediction> recs; if (candidates.size() < offset) { recs = new ArrayList<>(); } else { recs = candidates.subList(offset, candidates.size()); } return new RankedResult(recs, offset, curLimit, scoredList.size()); }
From source file:org.grouplens.samantha.server.evaluator.metric.NDCG.java
public void add(List<ObjectNode> groundTruth, List<Prediction> recommendations) { Object2DoubleMap<String> releItems = new Object2DoubleOpenHashMap<>(); for (JsonNode entity : groundTruth) { String item = FeatureExtractorUtilities.composeConcatenatedKey(entity, config.itemKeys); releItems.put(item, entity.get(config.relevanceKey).asDouble()); }//from w w w. ja v a 2s . c o m int maxN = 0; for (Integer n : config.N) { if (n > maxN) { maxN = n; } if (recommendations.size() < n) { Logger.error("The number of recommendations({}) is less than the indicated NDCG N({})", recommendations.size(), n); } } double[] dcg = new double[config.N.size()]; for (int i = 0; i < recommendations.size(); i++) { int rank = i + 1; String recItem = FeatureExtractorUtilities.composeConcatenatedKey(recommendations.get(i).getEntity(), config.itemKeys); if (releItems.containsKey(recItem)) { for (int j = 0; j < config.N.size(); j++) { int n = config.N.get(j); if (rank <= n) { dcg[j] += (Math.pow(2.0, releItems.getDouble(recItem)) / Math.log(1.0 + rank)); } } } if (rank > maxN) { break; } } double[] maxDcg = new double[config.N.size()]; if (groundTruth.size() <= maxN) { maxN = groundTruth.size(); } Ordering<ObjectNode> ordering = RetrieverUtilities.jsonFieldOrdering(config.relevanceKey); List<ObjectNode> topN = ordering.greatestOf(groundTruth, maxN); for (int i = 0; i < topN.size(); i++) { int rank = i + 1; double relevance = topN.get(i).get(config.relevanceKey).asDouble(); if (relevance > 0.0) { for (int j = 0; j < config.N.size(); j++) { int n = config.N.get(j); if (rank <= n) { maxDcg[j] += (Math.pow(2.0, relevance) / Math.log(1.0 + rank)); } } } else { break; } } for (int i = 0; i < config.N.size(); i++) { DCG.set(i, DCG.getDouble(i) + dcg[i] / maxDcg[i]); } cnt += 1; }
From source file:org.grouplens.samantha.server.ranker.EntityFieldRanker.java
public RankedResult rank(RetrievedResult retrievedResult, RequestContext requestContext) { List<ObjectNode> entityList = retrievedResult.getEntityList(); int curLimit = limit; if (pageSize == 0 || limit > entityList.size()) { curLimit = entityList.size();/*from w ww . j ava 2 s .co m*/ } List<Prediction> scoredList = new ArrayList<>(entityList.size()); for (ObjectNode entity : entityList) { scoredList.add(new Prediction(entity, null, 0.0)); } List<Prediction> candidates; if (whetherOrder) { Ordering<Prediction> ordering = RankerUtilities.scoredResultFieldOrdering(orderField); if (ascending) { candidates = ordering.leastOf(scoredList, offset + curLimit); } else { candidates = ordering.greatestOf(scoredList, offset + curLimit); } } else { candidates = scoredList; } List<Prediction> recs; if (offset >= candidates.size()) { recs = new ArrayList<>(); } else { recs = candidates.subList(offset, curLimit); } return new RankedResult(recs, offset, curLimit, retrievedResult.getMaxHits()); }
From source file:org.lenskit.basic.TopNItemRecommender.java
@Nonnull private ResultList getTopNResults(int n, Iterable<Result> scores) { Ordering<Result> ord = Results.scoreOrder(); List<Result> topN; if (n < 0) { topN = ord.reverse().immutableSortedCopy(scores); } else {/*from w w w . ja v a2 s . c o m*/ topN = ord.greatestOf(scores, n); } return Results.newResultList(topN); }
From source file:org.grouplens.samantha.modeler.knn.FeatureKnnModel.java
private List<double[]> getNeighbors(int curIndex, IntList svdIndices, SVDFeature svdFeature) { List<double[]> raw = new ArrayList<>(svdIndices.size()); for (int target : svdIndices) { if (target != curIndex) { double[] pair = new double[2]; pair[0] = target;/*from w w w . j ava2s . c o m*/ pair[1] = svdFeature.getVectorVarByNameIndex(SVDFeatureKey.FACTORS.get(), target) .cosine(svdFeature.getVectorVarByNameIndex(SVDFeatureKey.FACTORS.get(), curIndex)); raw.add(pair); } } Ordering<double[]> pairDoubleOrdering = SortingUtilities.pairDoubleSecondOrdering(); List<double[]> neighbors; if (reverse) { neighbors = pairDoubleOrdering.leastOf(raw, numNeighbors); } else { neighbors = pairDoubleOrdering.greatestOf(raw, numNeighbors); } return neighbors; }
From source file:co.cask.tigon.analytics.Analytics.java
@Tick(unit = TimeUnit.SECONDS, delay = 60) public void logTopTweets() throws InterruptedException { if (hashtagCounts.isEmpty()) { return;/* ww w.j a va 2 s . c om*/ } Ordering<Map.Entry<String, Integer>> entryOrdering = Ordering.natural() .onResultOf(new Function<Map.Entry<String, Integer>, Integer>() { public Integer apply(Map.Entry<String, Integer> entry) { return entry.getValue(); } }); List<Map.Entry<String, Integer>> topHashtags = entryOrdering.greatestOf(hashtagCounts.entrySet(), 10); hashtagCounts.clear(); LOG.info("Top hashtags in the last minute : " + topHashtags); }
From source file:org.glowroot.ui.TransactionJsonService.java
private static List<String> getTopTimerNames(List<StackedPoint> stackedPoints, int topX) { MutableDoubleMap<String> timerTotals = new MutableDoubleMap<String>(); for (StackedPoint stackedPoint : stackedPoints) { for (Map.Entry<String, MutableDouble> entry : stackedPoint.getStackedTimers().entrySet()) { timerTotals.add(entry.getKey(), entry.getValue().doubleValue()); }// www . jav a 2s . c o m } Ordering<Map.Entry<String, MutableDouble>> valueOrdering = Ordering.natural() .onResultOf(new Function<Map.Entry<String, MutableDouble>, Double>() { @Override public Double apply(Map. /*@Nullable*/ Entry<String, MutableDouble> entry) { checkNotNull(entry); return entry.getValue().doubleValue(); } }); List<String> timerNames = Lists.newArrayList(); @SuppressWarnings("assignment.type.incompatible") List<Map.Entry<String, MutableDouble>> topTimerTotals = valueOrdering.greatestOf(timerTotals.entrySet(), topX); for (Map.Entry<String, MutableDouble> entry : topTimerTotals) { timerNames.add(entry.getKey()); } return timerNames; }
From source file:com.xiaomi.linden.cluster.ResultMerger.java
private static void mergeFacet(final LindenSearchRequest lindenRequest, final List<LindenResult> resultList, LindenResult mergedResult) {/*from ww w . j a va 2s .co m*/ if (resultList.size() == 1) { mergedResult.setFacetResults(resultList.get(0).getFacetResults()); mergedResult.setAggregationResults(resultList.get(0).getAggregationResults()); return; } Ordering<LindenLabelAndValue> labelAndValueOrdering = new Ordering<LindenLabelAndValue>() { @Override public int compare(@Nullable LindenLabelAndValue lv1, @Nullable LindenLabelAndValue lv2) { int cmp = Integer.compare(lv1.getValue(), lv2.getValue()); if (cmp != 0) { return cmp; } return lv2.getLabel().compareTo(lv1.getLabel()); } }; // merge browse result for (int i = 0; i < lindenRequest.getFacet().getFacetParamsSize(); ++i) { LindenFacetResult mergedFacetResult = new LindenFacetResult(); mergedFacetResult.setDim(lindenRequest.getFacet().getFacetParams().get(i).facetDimAndPath.dim); mergedFacetResult.setPath(lindenRequest.getFacet().getFacetParams().get(i).facetDimAndPath.path); Map<String, Integer> labelValueMap = new HashMap<>(); for (int j = 0; j < resultList.size(); ++j) { if (resultList.get(j).getFacetResults() == null) { continue; } LindenFacetResult lindenFacetResult = resultList.get(j).getFacetResults().get(i); if (lindenFacetResult == null) { continue; } mergedFacetResult.setValue(mergedFacetResult.getValue() + lindenFacetResult.getValue()); if (lindenFacetResult.getChildCount() > mergedFacetResult.getChildCount()) { mergedFacetResult.setChildCount(lindenFacetResult.getChildCount()); } for (int k = 0; k < lindenFacetResult.getLabelValuesSize(); ++k) { String label = lindenFacetResult.getLabelValues().get(k).getLabel(); int previous = labelValueMap.containsKey(label) ? labelValueMap.get(label) : 0; labelValueMap.put(label, previous + lindenFacetResult.getLabelValues().get(k).getValue()); } } if (labelValueMap.size() > 0) { List<LindenLabelAndValue> labelAndValues = new ArrayList<>(); Set<Map.Entry<String, Integer>> entrySet = labelValueMap.entrySet(); for (Iterator<Map.Entry<String, Integer>> it = entrySet.iterator(); it.hasNext();) { Map.Entry<String, Integer> entry = it.next(); labelAndValues.add(new LindenLabelAndValue(entry.getKey(), entry.getValue())); } if (labelAndValues.size() > mergedFacetResult.getChildCount()) { mergedFacetResult.setChildCount(labelAndValues.size()); } List<LindenLabelAndValue> topLabelAndValues = labelAndValueOrdering.greatestOf(labelAndValues, lindenRequest.getFacet().getFacetParams().get(i).getTopN()); mergedFacetResult.setLabelValues(topLabelAndValues); } mergedResult.addToFacetResults(mergedFacetResult); } // merge aggregation result for (int i = 0; i < lindenRequest.getFacet().getAggregationsSize(); ++i) { AggregationResult mergedAggregationResult = new AggregationResult(); mergedAggregationResult.setField(lindenRequest.getFacet().getAggregations().get(i).getField()); List<LindenLabelAndValue> lindenLabelAndValues = new ArrayList<>(); for (int j = 0; j < lindenRequest.getFacet().getAggregations().get(i).getBucketsSize(); ++j) { LindenLabelAndValue lindenLabelAndValue = new LindenLabelAndValue(); lindenLabelAndValue.setLabel( resultList.get(0).getAggregationResults().get(i).getLabelValues().get(j).getLabel()); int value = 0; for (int k = 0; k < resultList.size(); ++k) { value += resultList.get(k).getAggregationResults().get(i).getLabelValues().get(j).getValue(); } lindenLabelAndValue.setValue(value); lindenLabelAndValues.add(lindenLabelAndValue); } mergedAggregationResult.setLabelValues(lindenLabelAndValues); mergedResult.addToAggregationResults(mergedAggregationResult); } }