00001 #ifndef moses_LexicalReordering_h
00002 #define moses_LexicalReordering_h
00003
00004 #include <string>
00005 #include <vector>
00006 #include "Factor.h"
00007 #include "Phrase.h"
00008 #include "TypeDef.h"
00009 #include "Util.h"
00010 #include "WordsRange.h"
00011 #include "ScoreProducer.h"
00012 #include "FeatureFunction.h"
00013
00014 #include "LexicalReorderingState.h"
00015 #include "LexicalReorderingTable.h"
00016
00017 namespace Moses
00018 {
00019
00020 class Factor;
00021 class Phrase;
00022 class Hypothesis;
00023 class InputType;
00024
00025 class LexicalReordering : public StatefulFeatureFunction
00026 {
00027 public:
00028 LexicalReordering(std::vector<FactorType>& f_factors,
00029 std::vector<FactorType>& e_factors,
00030 const std::string &modelType,
00031 const std::string &filePath,
00032 const std::vector<float>& weights);
00033 virtual ~LexicalReordering();
00034
00035 virtual size_t GetNumScoreComponents() const {
00036 return m_configuration.GetNumScoreComponents();
00037 }
00038
00039 virtual FFState* Evaluate(const Hypothesis& cur_hypo,
00040 const FFState* prev_state,
00041 ScoreComponentCollection* accumulator) const;
00042
00043 virtual FFState* EvaluateChart(const ChartHypothesis&,
00044 int ,
00045 ScoreComponentCollection*) const {
00046 CHECK(0);
00047 return NULL;
00048 }
00049
00050 virtual const FFState* EmptyHypothesisState(const InputType &input) const;
00051
00052 virtual std::string GetScoreProducerDescription(unsigned) const {
00053 return "LexicalReordering_" + m_modelTypeString;
00054 }
00055
00056 std::string GetScoreProducerWeightShortName(unsigned) const {
00057 return "d";
00058 };
00059
00060 void InitializeForInput(const InputType& i) {
00061 m_table->InitializeForInput(i);
00062 }
00063
00064 Scores GetProb(const Phrase& f, const Phrase& e) const;
00065
00066 private:
00067 bool DecodeCondition(std::string s);
00068 bool DecodeDirection(std::string s);
00069 bool DecodeNumFeatureFunctions(std::string s);
00070
00071 LexicalReorderingConfiguration m_configuration;
00072 std::string m_modelTypeString;
00073 std::vector<std::string> m_modelType;
00074 LexicalReorderingTable* m_table;
00075 size_t m_numScoreComponents;
00076
00077 std::vector<LexicalReorderingConfiguration::Condition> m_condition;
00078
00079
00080 std::vector<FactorType> m_factorsE, m_factorsF;
00081 };
00082
00083 }
00084
00085 #endif