#include "CountNonTerms.h" #include "moses/Util.h" #include "moses/TargetPhrase.h" using namespace std; namespace Moses { CountNonTerms::CountNonTerms(const std::string &line) :StatelessFeatureFunction(line,true) ,m_all(true) ,m_sourceSyntax(false) ,m_targetSyntax(false) { ReadParameters(); } void CountNonTerms::EvaluateInIsolation(const Phrase &sourcePhrase , const TargetPhrase &targetPhrase , ScoreComponentCollection &scoreBreakdown , ScoreComponentCollection &estimatedScores) const { vector scores(m_numScoreComponents, 0); size_t indScore = 0; if (m_all) { for (size_t i = 0; i < targetPhrase.GetSize(); ++i) { const Word &word = targetPhrase.GetWord(i); if (word.IsNonTerminal()) { ++scores[indScore]; } } ++indScore; } if (m_targetSyntax) { for (size_t i = 0; i < targetPhrase.GetSize(); ++i) { const Word &word = targetPhrase.GetWord(i); if (word.IsNonTerminal() && word != m_options->syntax.output_default_non_terminal) { ++scores[indScore]; } } ++indScore; } if (m_sourceSyntax) { for (size_t i = 0; i < sourcePhrase.GetSize(); ++i) { const Word &word = sourcePhrase.GetWord(i); if (word.IsNonTerminal() && word != m_options->syntax.input_default_non_terminal) { ++scores[indScore]; } } ++indScore; } scoreBreakdown.PlusEquals(this, scores); } void CountNonTerms::SetParameter(const std::string& key, const std::string& value) { if (key == "all") { m_all = Scan(value); } else if (key == "source-syntax") { m_sourceSyntax = Scan(value); } else if (key == "target-syntax") { m_targetSyntax = Scan(value); } else { StatelessFeatureFunction::SetParameter(key, value); } } void CountNonTerms:: Load(AllOptions::ptr const& opts) { m_options = opts; } }