private void addCoref(Communication comm) { AnalyticUUIDGeneratorFactory f = new AnalyticUUIDGeneratorFactory(comm); AnalyticUUIDGenerator g = f.create(); corefMentions = new EntityMentionSet(); corefMentions.setUuid(g.next()); corefMentions.setMetadata(Conll2011.META_COREF); corefMentions.setMentionList(new ArrayList<>()); Map<String, List<EntityMention>> clusters = new HashMap<>(); int addedMentions = 0; for (Conll2011Sentence s : sentences) { // Get the entity mentions in this sentence Map<String, List<EntityMention>> c = s.getCoref(g); // Add these mentions to the EntityMentionSet for (List<EntityMention> ems : c.values()) { for (EntityMention em : ems) { corefMentions.addToMentionList(em); addedMentions++; } } // Merge into the document-level view of the entities for (Map.Entry<String, List<EntityMention>> se : c.entrySet()) { String clustId = se.getKey(); List<EntityMention> existingMentions = clusters.get(clustId); if (existingMentions == null) { existingMentions = new ArrayList<>(); clusters.put(clustId, existingMentions); } existingMentions.addAll(se.getValue()); } } int addedEntities = 0; corefClusters = new EntitySet(); corefClusters.setUuid(g.next()); corefClusters.setMetadata(Conll2011.META_COREF); corefClusters.setMentionSetId(corefMentions.getUuid()); corefClusters.setEntityList(new ArrayList<>()); for (Map.Entry<String, List<EntityMention>> cluster : clusters.entrySet()) { addedEntities++; Entity ent = new Entity(); ent.setUuid(g.next()); ent.setConfidence(1); for (EntityMention em : cluster.getValue()) ent.addToMentionIdList(em.getUuid()); corefClusters.addToEntityList(ent); } comm.addToEntitySetList(corefClusters); comm.addToEntityMentionSetList(corefMentions); if (conll2011.warnOnEmptyCoref && (addedMentions == 0 || addedEntities == 0)) { LOGGER.warn( "addedMentions=" + addedMentions + " addedEntities=" + addedEntities + " communication=" + comm.getId()); } }