00001 #pragma once
00002
00003 #include <string>
00004 #include <map>
00005 #include "StatefulFeatureFunction.h"
00006 #include "FFState.h"
00007 #include "moses/Phrase.h"
00008
00009 namespace Moses
00010 {
00011 enum ControlRecombinationType {
00012
00013 SameOutput = 1,
00014 Never = 2
00015 };
00016
00017 class ControlRecombination;
00018
00019 class ControlRecombinationState : public FFState
00020 {
00021 public:
00022 ControlRecombinationState(const ControlRecombination &ff)
00023 :m_ff(ff) {
00024 }
00025
00026 ControlRecombinationState(const Hypothesis &hypo, const ControlRecombination &ff);
00027 ControlRecombinationState(const ChartHypothesis &hypo, const ControlRecombination &ff);
00028
00029 virtual size_t hash() const;
00030 virtual bool operator==(const FFState& other) const;
00031
00032 const Phrase &GetPhrase() const {
00033 return m_outputPhrase;
00034 }
00035
00036 protected:
00037 Phrase m_outputPhrase;
00038 const ControlRecombination &m_ff;
00039 const void *m_hypo;
00040 };
00041
00043
00044
00045 class ControlRecombination : public StatefulFeatureFunction
00046 {
00047 public:
00048 ControlRecombination(const std::string &line)
00049 :StatefulFeatureFunction(0, line)
00050 ,m_type(SameOutput)
00051
00052 {
00053 m_tuneable = false;
00054 ReadParameters();
00055 }
00056
00057 bool IsUseable(const FactorMask &mask) const {
00058 return true;
00059 }
00060
00061 FFState* EvaluateWhenApplied(
00062 const Hypothesis& cur_hypo,
00063 const FFState* prev_state,
00064 ScoreComponentCollection* accumulator) const;
00065
00066 FFState* EvaluateWhenApplied(
00067 const ChartHypothesis& ,
00068 int ,
00069 ScoreComponentCollection* accumulator) const;
00070
00071 virtual const FFState* EmptyHypothesisState(const InputType &input) const {
00072 return new ControlRecombinationState(*this);
00073 }
00074
00075 std::vector<float> DefaultWeights() const;
00076
00077 void SetParameter(const std::string& key, const std::string& value);
00078
00079 ControlRecombinationType GetType() const {
00080 return m_type;
00081 }
00082 protected:
00083 ControlRecombinationType m_type;
00084 };
00085
00086
00087 }
00088