/** Returns a list of annotations to be added to the Behemoth document from the GATE one * */ private List<com.digitalpebble.behemoth.Annotation> convertGATEAnnotationsToBehemoth( AnnotationSet GATEAnnotionSet, com.digitalpebble.behemoth.BehemothDocument behemoth) { List<com.digitalpebble.behemoth.Annotation> beheannotations = new ArrayList<com.digitalpebble.behemoth.Annotation>(); AnnotationSet resultAS = GATEAnnotionSet.get(filters.getTypes()); // sort the GATE annotations List<gate.Annotation> annotationList = new ArrayList<gate.Annotation>(resultAS); Collections.sort(annotationList, new OffsetComparator()); Iterator<gate.Annotation> inputASIter = annotationList.iterator(); while (inputASIter.hasNext()) { gate.Annotation source = inputASIter.next(); com.digitalpebble.behemoth.Annotation target = new com.digitalpebble.behemoth.Annotation(); target.setType(source.getType()); target.setStart(source.getStartNode().getOffset().longValue()); target.setEnd(source.getEndNode().getOffset().longValue()); // now do the features // is the type listed? Set<String> expectedfeatnames = filters.getFeatureFilters().get(source.getType()); if (expectedfeatnames != null) { Iterator featurenames = source.getFeatures().keySet().iterator(); while (featurenames.hasNext()) { // cast the feature name to a string which will be right in // 99% of cases String featurename = featurenames.next().toString(); // if this feature name is not wanted just ignore it if (expectedfeatnames.contains(featurename) == false) continue; // we know that we want to keep this feature // let's see what the best way of representing the value // would be // TODO later => find a better way of mapping when not a // string Object originalvalue = source.getFeatures().get(featurename); if (originalvalue == null) originalvalue = "null"; target.getFeatures().put(featurename, originalvalue.toString()); } } beheannotations.add(target); } return beheannotations; }