// allocate list to hold IdentifiedAnnotations with concepts
List<IdentifiedAnnotation> listNonTrivialNE = new ArrayList<IdentifiedAnnotation>();
// allocate list to hold concepts in each named entity
List<Set<String>> listConcept = new ArrayList<Set<String>>();
for (IdentifiedAnnotation ne : listNE) {
FSArray concepts = ne.getOntologyConceptArr();
// add the concept senses from each named entity
if (concepts != null && concepts.size() > 0) {
listNonTrivialNE.add(ne);
Set<String> conceptSenses = new HashSet<String>();
listConcept.add(conceptSenses);
for (int i = 0; i < concepts.size(); i++) {
if (concepts.get(i) != null) {
String conceptId = this.getConceptId(concepts.get(i));
if (!Strings.isNullOrEmpty(conceptId))
conceptSenses.add(conceptId);
}
}
}
}
if(log.isTraceEnabled())
log.trace("listConcept: " + listConcept);
// iterate through named entities and disambiguate
for (int i = 0; i < listConcept.size(); i++) {
Set<String> conceptSenses = listConcept.get(i);
// only bother with wsd if there is more than one sense
if (conceptSenses.size() > 1) {
if(log.isTraceEnabled())
log.trace("i: " + i + ", conceptSenses: " + conceptSenses);
Map<String, Double> scores = new HashMap<String, Double>();
String concept = this.wsd.disambiguate(listConcept, i, null,
windowSize, metric, scores, true);
if(log.isTraceEnabled())
log.trace("i: " + i + ", concept: " + concept);
IdentifiedAnnotation ne = listNonTrivialNE.get(i);
FSArray concepts = ne.getOntologyConceptArr();
for (int j = 0; j < concepts.size(); j++) {
OntologyConcept yoc = (OntologyConcept) concepts.get(j);
String conceptId = this.getConceptId(yoc);
// update the score and set the predicted concept field
if (concept == null || concept.equals(conceptId))
yoc.setDisambiguated(true);
if (scores.containsKey(conceptId))
yoc.setScore(scores.get(conceptId));
}
} else if (conceptSenses.size() == 1) {
// only one concept - for ytex concept set the predicted concept
IdentifiedAnnotation ne = listNonTrivialNE.get(i);
FSArray concepts = ne.getOntologyConceptArr();
OntologyConcept oc = (OntologyConcept) concepts.get(0);
oc.setDisambiguated(true);
}
}
}