/* 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;
/**
* This interface provide ways to calculate logP based on rule and
* state information. In order to implement a new feature function
* you must (1) implement this FeatureFunction interface, and (2)
* implement the FFTransitionResult and FFDPState interfaces. BUG:
* the distinction between those latter two interfaces is unclear.
*
* @author wren ng thornton <wren@users.sourceforge.net>
* @author Zhifei Li, <zhifei.work@gmail.com>
* @version $LastChangedDate: 2010-01-14 19:15:28 -0600 (Thu, 14 Jan 2010) $
*/
public interface FeatureFunction {
//===============================================================
// Attributes
//===============================================================
/** It is essential to make sure the feature ID is unique
* for each feature. */
void setFeatureID(int id);
int getFeatureID();
void setWeight(double weight);
double getWeight();
boolean isStateful();
void setStateID(int stateID);
int getStateID();
//===============================================================
// Methods
//===============================================================
/**sentID might be useful for sentence-specific features (e.g., oralce model)
* */
/**
* It is used when initializing translation grammars (for
* pruning purpose, and to get stateless logP for each rule).
* This is also required to sort the rules (required by Cube-pruning).
*/
double estimateLogP(Rule rule, int sentID);
/**estimate future logP, e.g., the logPs of partial n-grams
* asscociated with the left-edge ngram state
* */
double estimateFutureLogP(Rule rule, DPState curDPState, int sentID);
double transitionLogP(Rule rule, List<HGNode> antNodes, int spanStart, int spanEnd, SourcePath srcPath, int sentID);
double transitionLogP(HyperEdge edge, int spanStart, int spanEnd, int sentID);
/**Edges calling finalTransition do not have concret rules associated with them.
* */
double finalTransitionLogP(HGNode antNode, int spanStart, int spanEnd, SourcePath srcPath, int sentID);
double finalTransitionLogP(HyperEdge edge, int spanStart, int spanEnd, int sentID);
}