/** * Collect the correct segments for this example. These are defined as all segments with * non-NEGATIVE labels, and all unit-length negative labels not inside a positives label. */ private Segmentation correctSegments( CandidateSegmentGroup g, ExampleSchema schema, int maxSegmentSize) { Segmentation result = new Segmentation(schema); int pos, len; for (pos = 0; pos < g.getSequenceLength(); ) { boolean addedASegmentStartingAtPos = false; for (len = 1; !addedASegmentStartingAtPos && len <= maxSegmentSize; len++) { Instance inst = g.getSubsequenceInstance(pos, pos + len); ClassLabel label = g.getSubsequenceLabel(pos, pos + len); if (inst != null && !label.isNegative()) { result.add( new Segmentation.Segment( pos, pos + len, schema.getClassIndex(label.bestClassName()))); addedASegmentStartingAtPos = true; pos += len; } } if (!addedASegmentStartingAtPos) { // Instance inst = g.getSubsequenceInstance(pos,pos+1); // ClassLabel label = g.getSubsequenceLabel(pos,pos+1); result.add( new Segmentation.Segment( pos, pos + 1, schema.getClassIndex(ExampleSchema.NEG_CLASS_NAME))); pos += 1; } } return result; }