private static Map<Set<Object>, Polarity> getPolarityMap(final Iterable<Opinion> opinions, @Nullable final Polarity expectedPolarity) { final Map<Set<Object>, Polarity> map = Maps.newHashMap(); for (final Opinion opinion : opinions) { final Set<Object> expression = getExpression(opinion); final Polarity polarity = getPolarity(opinion); if (expectedPolarity != null && !expectedPolarity.equals(polarity)) { continue; } final Polarity oldPolarity = map.put(expression, polarity); if (oldPolarity != null && !Objects.equals(oldPolarity, polarity)) { LOGGER.warn("Different polarities " + oldPolarity + ", " + polarity + " for expression of opinion " + opinion.getId()); } } return map; }
public synchronized Evaluator add(final OpinionPrecisionRecall opr) { this.score = null; this.polarityCMEvaluator.add(opr.getPolarityCM()); for (int i = 0; i < this.polarityByValueEvaluators.length; ++i) { this.polarityByValueEvaluators[i].add(opr.polaritySPRsByValue[i]); } this.polarityEvaluator.add(opr.getPolaritySPR()); this.expressionEvaluator.add(opr.getExpressionSPR()); this.holderEvaluator.add(opr.getHolderSPR()); this.targetEvaluator.add(opr.getTargetSPR()); return this; }
public static BiFunction<Opinion, Opinion, List<Double>> matcher() { return (final Opinion g, final Opinion t) -> { final Set<Object> ge = getExpression(g); final Set<Object> te = getExpression(t); final Set<Object> gh = getHolder(g); final Set<Object> th = getHolder(t); final Set<Object> gt = getTarget(g); final Set<Object> tt = getTarget(t); if (Sets.intersection(ge, te).isEmpty()) { return null; } final List<Double> scores = Lists.newArrayListWithCapacity(6); scores.add(Util.coverage(ge, te)); scores.add(Util.coverage(te, ge)); scores.add(Util.coverage(gt, tt)); scores.add(Util.coverage(tt, gt)); scores.add(Util.coverage(gh, th)); scores.add(Util.coverage(th, gh)); return scores; }; }
private static Multimap<Set<Object>, Opinion> indexOpinionsByExpression( final Iterable<Opinion> opinions) { final Multimap<Set<Object>, Opinion> map = HashMultimap.create(); for (final Opinion opinion : opinions) { final Set<Object> expression = getExpression(opinion); map.put(expression, opinion); } return map; }
public synchronized OpinionPrecisionRecall getResult() { if (this.score == null) { final int polarities = this.polarityByValueEvaluators.length; final ConfusionMatrix polarityCM = this.polarityCMEvaluator.getResult(); final SetPrecisionRecall[] polaritySPRsByValue = new SetPrecisionRecall[polarities]; for (int i = 0; i < polarities; ++i) { polaritySPRsByValue[i] = this.polarityByValueEvaluators[i].getResult(); } final SetPrecisionRecall polaritySPR = this.polarityEvaluator.getResult(); final SetPrecisionRecall expressionSPR = this.expressionEvaluator.getResult(); final SetPrecisionRecall holderSPR = this.holderEvaluator.getResult(); final SetPrecisionRecall targetSPR = this.targetEvaluator.getResult(); this.score = new OpinionPrecisionRecall(polarityCM, polaritySPRsByValue, polaritySPR, expressionSPR, holderSPR, targetSPR); } return this.score; }