/* This file is part of the Joshua Machine Translation System. * * Joshua is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */ package joshua.decoder.ff; import java.util.List; import joshua.decoder.chart_parser.SourcePath; import joshua.decoder.ff.state_maintenance.DPState; import joshua.decoder.ff.tm.Rule; import joshua.decoder.hypergraph.HGNode; import joshua.decoder.hypergraph.HyperEdge; /** * * @author Zhifei Li, <zhifei.work@gmail.com> * @version $LastChangedDate: 2010-01-25 21:52:34 -0600 (Mon, 25 Jan 2010) $ */ public abstract class DefaultStatelessFF implements FeatureFunction { private int stateID = -1;//invalid id private double weight = 0.0; private int featureID; protected final int owner; public DefaultStatelessFF(final double weight, final int owner, int id) { this.weight = weight; this.owner = owner; this.featureID = id; } public final boolean isStateful() { return false; } public final double getWeight() { return this.weight; } public final void setWeight(final double weight) { this.weight = weight; } public final int getFeatureID() { return this.featureID; } public final void setFeatureID(final int id) { this.featureID = id; } public final int getStateID() { return this.stateID; } public final void setStateID(final int id) { this.stateID = id; } public double transitionLogP(HyperEdge edge, int spanStart, int spanEnd, int sentID){ return transitionLogP(edge.getRule(), edge.getAntNodes(), spanStart, spanEnd, edge.getSourcePath(), sentID ); } public double transitionLogP(Rule rule, List<HGNode> antNodes, int spanStart, int spanEnd, SourcePath srcPath, int sentID){ return estimateLogP(rule, sentID); } public final double estimateFutureLogP(Rule rule, DPState curDPState, int sentID){ if (null != curDPState) { throw new IllegalArgumentException("estimateFutureCost: curDPState for a stateless feature is NOT null"); } return 0; } public double finalTransitionLogP(HGNode antNode, int spanStart, int spanEnd, SourcePath srcPath, int sentID){ return 0.0; } public double finalTransitionLogP(HyperEdge edge, int spanStart, int spanEnd, int sentID){ return finalTransitionLogP(edge.getAntNodes().get(0), spanStart, spanEnd, edge.getSourcePath(), sentID ); } }