/** Creates a new holder for sliding-window instances. */ public CompactCandidateSegmentGroup(FeatureFactory factory, CandidateSegmentGroup group) { // The length of the original sequence this.sequenceLength = group.getSequenceLength(); // The maximum length of any sliding window this.maxWindowSize = group.getMaxWindowSize(); this.totalSize = group.size(); this.classNameSet = group.classNameSet(); this.subPopId = group.getSubpopulationId(); unitInstance = new Instance[sequenceLength]; delta = new Delta[sequenceLength][maxWindowSize]; label = new ClassLabel[sequenceLength][maxWindowSize]; segmentSource = new Object[sequenceLength][maxWindowSize]; for (int i = 0; i < sequenceLength; i++) { unitInstance[i] = factory.compress(group.getSubsequenceInstance(i, i + 1)); } for (int i = 0; i < sequenceLength; i++) { for (int j = i + 1; j - i <= maxWindowSize; j++) { if (group.getSubsequenceInstance(i, j) != null) { label[i][j - i - 1] = group.getSubsequenceLabel(i, j); segmentSource[i][j - i - 1] = group.getSubsequenceInstance(i, j).getSource(); delta[i][j - i - 1] = new Delta(factory, i, j, group.getSubsequenceInstance(i, j)); } } } }
/** * 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; }