|
#include "ControlRecombination.h" |
|
#include "moses/Hypothesis.h" |
|
#include "moses/Manager.h" |
|
#include "moses/ChartHypothesis.h" |
|
#include "moses/ChartManager.h" |
|
#include "moses/StaticData.h" |
|
#include "moses/InputFileStream.h" |
|
#include "moses/Util.h" |
|
#include "util/exception.hh" |
|
|
|
using namespace std; |
|
|
|
namespace Moses |
|
{ |
|
ControlRecombinationState::ControlRecombinationState(const Hypothesis &hypo, const ControlRecombination &ff) |
|
:m_ff(ff) |
|
{ |
|
if (ff.GetType() == SameOutput) { |
|
|
|
hypo.GetOutputPhrase(m_outputPhrase); |
|
} else { |
|
m_hypo = &hypo; |
|
} |
|
} |
|
|
|
ControlRecombinationState::ControlRecombinationState(const ChartHypothesis &hypo, const ControlRecombination &ff) |
|
:m_ff(ff) |
|
{ |
|
if (ff.GetType() == SameOutput) { |
|
hypo.GetOutputPhrase(m_outputPhrase); |
|
} else { |
|
m_hypo = &hypo; |
|
} |
|
} |
|
|
|
size_t ControlRecombinationState::hash() const |
|
{ |
|
size_t ret; |
|
if (m_ff.GetType() == SameOutput) { |
|
ret = hash_value(m_outputPhrase); |
|
} else { |
|
|
|
ret = (size_t) m_hypo; |
|
} |
|
return ret; |
|
} |
|
|
|
bool ControlRecombinationState::operator==(const FFState& other) const |
|
{ |
|
const ControlRecombinationState &otherFF = static_cast<const ControlRecombinationState&>(other); |
|
|
|
if (m_ff.GetType() == SameOutput) { |
|
return m_outputPhrase == otherFF.m_outputPhrase; |
|
} else { |
|
|
|
if (m_hypo == otherFF.m_hypo) |
|
return true; |
|
return (m_hypo == otherFF.m_hypo); |
|
} |
|
} |
|
|
|
std::vector<float> ControlRecombination::DefaultWeights() const |
|
{ |
|
UTIL_THROW_IF2(m_numScoreComponents, |
|
"ControlRecombination should not have any scores"); |
|
vector<float> ret(0); |
|
return ret; |
|
} |
|
|
|
FFState* ControlRecombination::EvaluateWhenApplied( |
|
const Hypothesis& hypo, |
|
const FFState* prev_state, |
|
ScoreComponentCollection* accumulator) const |
|
{ |
|
return new ControlRecombinationState(hypo, *this); |
|
} |
|
|
|
FFState* ControlRecombination::EvaluateWhenApplied( |
|
const ChartHypothesis &hypo, |
|
int , |
|
ScoreComponentCollection* accumulator) const |
|
{ |
|
return new ControlRecombinationState(hypo, *this); |
|
} |
|
|
|
void ControlRecombination::SetParameter(const std::string& key, const std::string& value) |
|
{ |
|
if (key == "type") { |
|
m_type = (ControlRecombinationType) Scan<int>(value); |
|
} else { |
|
StatefulFeatureFunction::SetParameter(key, value); |
|
} |
|
} |
|
|
|
} |
|
|
|
|