package edu.cmu.minorthird.classify.sequential;
import java.util.Iterator;
import edu.cmu.minorthird.classify.Instance;
import edu.cmu.minorthird.classify.transform.InstanceTransform;
import edu.cmu.minorthird.util.ProgressCounter;
/*package*/ class SegmentTransform
{
private InstanceTransform innerTransform;
public SegmentTransform(InstanceTransform innerTransform) { this.innerTransform = innerTransform; }
public SegmentDataset transform(SegmentDataset dataset)
{
ProgressCounter pc =
new ProgressCounter("adding dictionary distances","segment group",dataset.getNumberOfSegmentGroups());
SegmentDataset transformed = new SegmentDataset();
for (Iterator<CandidateSegmentGroup> i = dataset.candidateSegmentGroupIterator(); i.hasNext(); ) {
transformed.addCandidateSegmentGroup( transform(i.next()) );
pc.progress();
}
pc.finished();
return transformed;
}
public CandidateSegmentGroup transform(CandidateSegmentGroup g)
{
MutableCandidateSegmentGroup result =
new MutableCandidateSegmentGroup(g.getMaxWindowSize(), g.getSequenceLength());
for (int lo=0; lo<g.getSequenceLength(); lo++) {
for (int len=1; len<=g.getMaxWindowSize(); len++) {
Instance gInstance = g.getSubsequenceInstance(lo,lo+len);
if (gInstance!=null) {
Instance tInstance = innerTransform.transform(gInstance);
//Feature f = new Feature("distToSome POS");
//if (tInstance.getWeight(f)!=0) System.out.println("useful instance: "+tInstance);
result.setSubsequence(lo, lo+len, tInstance, g.getSubsequenceLabel(lo,lo+len));
}
}
}
return result;
}
}