00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <iostream>
00024
00025 #include "DecodeFeature.h"
00026 #include "moses/DecodeStep.h"
00027 #include "moses/StaticData.h"
00028
00029 using namespace std;
00030
00031 namespace Moses
00032 {
00033
00034 DecodeFeature::DecodeFeature(const std::string &line, bool registerNow)
00035 : StatelessFeatureFunction(line, registerNow)
00036 , m_container(NULL)
00037 {
00038 VERBOSE(2,"DecodeFeature:" << std::endl);
00039 }
00040
00041 DecodeFeature::DecodeFeature(size_t numScoreComponents
00042 , const std::string &line)
00043 : StatelessFeatureFunction(numScoreComponents, line)
00044 , m_container(NULL)
00045 {
00046 VERBOSE(2,"DecodeFeature: no factors yet" << std::endl);
00047 }
00048
00049 DecodeFeature::DecodeFeature(size_t numScoreComponents
00050 , const std::vector<FactorType> &input
00051 , const std::vector<FactorType> &output
00052 , const std::string &line)
00053 : StatelessFeatureFunction(numScoreComponents, line)
00054 , m_input(input), m_output(output)
00055 , m_container(NULL)
00056 {
00057 m_inputFactors = FactorMask(input);
00058 m_outputFactors = FactorMask(output);
00059 VERBOSE(2,"DecodeFeature: input=" << m_inputFactors << " output=" << m_outputFactors << std::endl);
00060 }
00061
00062 void DecodeFeature::SetParameter(const std::string& key, const std::string& value)
00063 {
00064 if (key == "input-factor") {
00065 m_input =Tokenize<FactorType>(value, ",");
00066 m_inputFactors = FactorMask(m_input);
00067 } else if (key == "output-factor") {
00068 m_output =Tokenize<FactorType>(value, ",");
00069 m_outputFactors = FactorMask(m_output);
00070 } else {
00071 StatelessFeatureFunction::SetParameter(key, value);
00072 }
00073 }
00074
00075
00076 const FactorMask& DecodeFeature::GetOutputFactorMask() const
00077 {
00078 return m_outputFactors;
00079 }
00080
00081
00082 const FactorMask& DecodeFeature::GetInputFactorMask() const
00083 {
00084 return m_inputFactors;
00085 }
00086
00087 const std::vector<FactorType>& DecodeFeature::GetInput() const
00088 {
00089 return m_input;
00090 }
00091
00092 const std::vector<FactorType>& DecodeFeature::GetOutput() const
00093 {
00094 return m_output;
00095 }
00096
00097 bool DecodeFeature::IsUseable(const FactorMask &mask) const
00098 {
00099 for (size_t i = 0; i < m_output.size(); ++i) {
00100 const FactorType &factor = m_output[i];
00101 if (!mask[factor]) {
00102 return false;
00103 }
00104 }
00105 return true;
00106 }
00107
00108 const DecodeGraph &DecodeFeature::GetDecodeGraph() const
00109 {
00110 assert(m_container);
00111 const DecodeGraph *graph = m_container->GetContainer();
00112 assert(graph);
00113 return *graph;
00114 }
00115
00116 }
00117