|
#include <stdexcept> |
|
#include "InputFeature.h" |
|
#include "moses/Util.h" |
|
#include "moses/ScoreComponentCollection.h" |
|
#include "moses/InputPath.h" |
|
#include "moses/StaticData.h" |
|
#include "moses/TranslationModel/PhraseDictionaryTreeAdaptor.h" |
|
|
|
using namespace std; |
|
|
|
namespace Moses |
|
{ |
|
InputFeature *InputFeature::s_instance = NULL; |
|
|
|
InputFeature::InputFeature(const std::string &line) |
|
: StatelessFeatureFunction(line,true) |
|
, m_numRealWordCount(0) |
|
{ |
|
m_numInputScores = this->m_numScoreComponents; |
|
ReadParameters(); |
|
|
|
UTIL_THROW_IF2(s_instance, "Can only have 1 input feature"); |
|
s_instance = this; |
|
} |
|
|
|
void InputFeature::Load(AllOptions::ptr const& opts) |
|
{ |
|
m_options = opts; |
|
const PhraseDictionary *pt = PhraseDictionary::GetColl()[0]; |
|
const PhraseDictionaryTreeAdaptor *ptBin = dynamic_cast<const PhraseDictionaryTreeAdaptor*>(pt); |
|
|
|
m_legacy = (ptBin != NULL); |
|
} |
|
|
|
void InputFeature::SetParameter(const std::string& key, const std::string& value) |
|
{ |
|
if (key == "num-input-features") { |
|
m_numInputScores = Scan<size_t>(value); |
|
} else if (key == "real-word-count") { |
|
m_numRealWordCount = Scan<size_t>(value); |
|
} else { |
|
StatelessFeatureFunction::SetParameter(key, value); |
|
} |
|
|
|
} |
|
|
|
void InputFeature::EvaluateWithSourceContext(const InputType &input |
|
, const InputPath &inputPath |
|
, const TargetPhrase &targetPhrase |
|
, const StackVec *stackVec |
|
, ScoreComponentCollection &scoreBreakdown |
|
, ScoreComponentCollection *estimatedScores) const |
|
{ |
|
if (m_legacy) { |
|
|
|
return; |
|
} else if (input.GetType() == WordLatticeInput) { |
|
const ScorePair *scores = inputPath.GetInputScore(); |
|
if (scores) { |
|
scoreBreakdown.PlusEquals(this, *scores); |
|
} |
|
} |
|
} |
|
|
|
} |
|
|
|
|