|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <iostream> |
|
|
|
#include "DecodeFeature.h" |
|
#include "moses/DecodeStep.h" |
|
#include "moses/StaticData.h" |
|
|
|
using namespace std; |
|
|
|
namespace Moses |
|
{ |
|
|
|
DecodeFeature::DecodeFeature(const std::string &line, bool registerNow) |
|
: StatelessFeatureFunction(line, registerNow) |
|
, m_container(NULL) |
|
{ |
|
VERBOSE(2,"DecodeFeature:" << std::endl); |
|
} |
|
|
|
DecodeFeature::DecodeFeature(size_t numScoreComponents |
|
, const std::string &line) |
|
: StatelessFeatureFunction(numScoreComponents, line) |
|
, m_container(NULL) |
|
{ |
|
VERBOSE(2,"DecodeFeature: no factors yet" << std::endl); |
|
} |
|
|
|
DecodeFeature::DecodeFeature(size_t numScoreComponents |
|
, const std::vector<FactorType> &input |
|
, const std::vector<FactorType> &output |
|
, const std::string &line) |
|
: StatelessFeatureFunction(numScoreComponents, line) |
|
, m_input(input), m_output(output) |
|
, m_container(NULL) |
|
{ |
|
m_inputFactors = FactorMask(input); |
|
m_outputFactors = FactorMask(output); |
|
VERBOSE(2,"DecodeFeature: input=" << m_inputFactors << " output=" << m_outputFactors << std::endl); |
|
} |
|
|
|
void DecodeFeature::SetParameter(const std::string& key, const std::string& value) |
|
{ |
|
if (key == "input-factor") { |
|
m_input =Tokenize<FactorType>(value, ","); |
|
m_inputFactors = FactorMask(m_input); |
|
} else if (key == "output-factor") { |
|
m_output =Tokenize<FactorType>(value, ","); |
|
m_outputFactors = FactorMask(m_output); |
|
} else { |
|
StatelessFeatureFunction::SetParameter(key, value); |
|
} |
|
} |
|
|
|
|
|
const FactorMask& DecodeFeature::GetOutputFactorMask() const |
|
{ |
|
return m_outputFactors; |
|
} |
|
|
|
|
|
const FactorMask& DecodeFeature::GetInputFactorMask() const |
|
{ |
|
return m_inputFactors; |
|
} |
|
|
|
const std::vector<FactorType>& DecodeFeature::GetInput() const |
|
{ |
|
return m_input; |
|
} |
|
|
|
const std::vector<FactorType>& DecodeFeature::GetOutput() const |
|
{ |
|
return m_output; |
|
} |
|
|
|
bool DecodeFeature::IsUseable(const FactorMask &mask) const |
|
{ |
|
for (size_t i = 0; i < m_output.size(); ++i) { |
|
const FactorType &factor = m_output[i]; |
|
if (!mask[factor]) { |
|
return false; |
|
} |
|
} |
|
return true; |
|
} |
|
|
|
const DecodeGraph &DecodeFeature::GetDecodeGraph() const |
|
{ |
|
assert(m_container); |
|
const DecodeGraph *graph = m_container->GetContainer(); |
|
assert(graph); |
|
return *graph; |
|
} |
|
|
|
} |
|
|
|
|