protected void printTextAnnotations(Collection<TextAnnotation> annotations, PrintStream ps) { List<TextAnnotation> taList = new ArrayList<TextAnnotation>(annotations); Collections.sort(taList, TextAnnotation.BY_SPAN()); for (TextAnnotation ta : annotations) { printTextAnnotation(ta, ps); } }
/** cycle through all annotations and remove any slots that have been inputted by the user */ @Override public void process(JCas jCas) throws AnalysisEngineProcessException { // List<CCPTextAnnotation> annotationsToRemove = new ArrayList<CCPTextAnnotation>(); for (Iterator<CCPTextAnnotation> annotIter = JCasUtil.iterator(jCas, CCPTextAnnotation.class); annotIter.hasNext(); ) { CCPTextAnnotation ccpTa = annotIter.next(); TextAnnotation ta = new WrappedCCPTextAnnotation(ccpTa); try { switch (removeOption) { case REMOVE_ALL: if (ta.getClassMention().getPrimitiveSlotMentions().size() > 0 || ta.getClassMention().getComplexSlotMentions().size() > 0) { // logger.log(Level.INFO, "Removing ALL slots from: " + ta.toString()); ta.getClassMention().setComplexSlotMentions(new ArrayList<ComplexSlotMention>()); ta.getClassMention().setPrimitiveSlotMentions(new ArrayList<PrimitiveSlotMention>()); } break; case REMOVE_COMPLEX: if (ta.getClassMention().getComplexSlotMentions().size() > 0) { // logger.log(Level.INFO, "Removing complex slots from: " + ta.toString()); ta.getClassMention().setComplexSlotMentions(new ArrayList<ComplexSlotMention>()); // logger.log(Level.INFO, "# complex slots remaining: " // + ta.getClassMention().getComplexSlotMentions().size()); } break; case REMOVE_PRIMITIVE: if (ta.getClassMention().getPrimitiveSlotMentions().size() > 0) { // logger.log(Level.INFO, "Removing primitive slots from: " + ta.toString()); ta.getClassMention().setPrimitiveSlotMentions(new ArrayList<PrimitiveSlotMention>()); } break; case REMOVE_NONE: // don't do anything break; default: throw new IllegalArgumentException( "Unhandled SlotRemoveOption: " + removeOption.name()); } } catch (Exception e) { throw new AnalysisEngineProcessException(e); } } // else { // throw new UnsupportedOperationException("This needs to be implemented still"); // String mentionName = ccpCM.getMentionName().toLowerCase(); // logger.debug("MentionName: " + mentionName + " MENTION NAMES OF INTEREST: " // + classesOfInterest.toString()); // if (classesOfInterest.contains(mentionName)) { // logger.debug("Found class of interest: " + mentionName); // // FSArray ccpSlots = ccpCM.getSlotMentions(); // // /* // * since the FSArray class has no remove() method, we will create a set of // * CCPSlotMentions that we will keep. If any slots are removed, they will // * not be added to this list, and then this new list will be put into a new // * FSArray, and replace the original FSArray. This is a bit of a // * work-around... perhaps there's a better way. // */ // List<CCPSlotMention> slotsToKeep = new ArrayList<CCPSlotMention>(); // boolean removedAtLeastOneSlot = false; // // if (ccpSlots != null) { // for (int i = 0; i < ccpSlots.size(); i++) { // CCPSlotMention ccpSM = (CCPSlotMention) ccpSlots.get(i); // String slotName = ccpSM.getMentionName().toLowerCase(); // if (slotsToRemoveList.contains(mentionName + "|" + slotName)) { // logger.debug("Found slot of interest: " + slotName); // /* then remove this slot */ // removedAtLeastOneSlot = true; // } else { // /* // * we are not going to remove this slot, so we store it in the // * list // */ // slotsToKeep.add(ccpSM); // } // } // } // // /* // * if we removed a slot, then we need to replace the FSArray for this // * CCPClassMention // */ // if (removedAtLeastOneSlot) { // FSArray keptSlots = new FSArray(jcas, slotsToKeep.size()); // for (int i = 0; i < keptSlots.size(); i++) { // keptSlots.set(i, slotsToKeep.get(i)); // } // ccpCM.setSlotMentions(keptSlots); // } // } // } // } // } // /* // * now remove annotations that had class mention types not in the classMentionTypesToKeep // * list // */ // for (CCPTextAnnotation ccpTA : annotationsToRemove) { // ccpTA.removeFromIndexes(); // ccpTA = null; // } }