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; }
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 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; }; }