/* Copyright (C) 2003 Univ. of Massachusetts Amherst, Computer Science Dept. This file is part of "MALLET" (MAchine Learning for LanguagE Toolkit). http://www.cs.umass.edu/~mccallum/mallet This software is provided under the terms of the Common Public License, version 1.0, as published by http://www.opensource.org. For further information, see the file `LICENSE' included with this distribution. */ package cc.mallet.pipe; import cc.mallet.types.*; /** * For each position in the target, remember the last non-background * label. Assumes that the target of piped instances is a LabelSequence. * Replaces the target with a LabelsSequence where row 0 is the original * labels, and row 1 is the last label. * * @author Charles Sutton * @version $Id: TargetRememberLastLabel.java,v 1.1 2007/10/22 21:37:39 mccallum Exp $ */ public class TargetRememberLastLabel extends Pipe { private String backgroundLabel; private boolean offset; public TargetRememberLastLabel () { this ("O", true); } /** offset determines how the memory and base sequences will be * aligned. If true, they'll be aligned like this: * <pre> * MEM O O S S S E L * BASE O S S O E L O * </pre> * otherwise, they'll be aligned like this: * <pre> * MEM O S S S E E L * BASE O S S O E L O * </pre> */ public TargetRememberLastLabel (String backgroundLabel, boolean offset) { this.backgroundLabel = backgroundLabel; this.offset = offset; } public Instance pipe(Instance carrier) { LabelSequence lblseq = (LabelSequence) carrier.getTarget (); Labels[] lbls = new Labels [lblseq.size()]; Label lastLabel = lblseq.getLabelAtPosition(0); for (int i = 0; i < lblseq.size(); i++) { Label thisLabel = lblseq.getLabelAtPosition (i); if (offset) lbls [i] = new Labels (new Label[] { thisLabel, lastLabel }); if (!thisLabel.toString().equals (backgroundLabel)) lastLabel = thisLabel; if (!offset) lbls [i] = new Labels (new Label[] { thisLabel, lastLabel }); } carrier.setTarget (new LabelsSequence (lbls)); return carrier; } }