|
#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<float> 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<bool>(value); |
|
} else if (key == "source-syntax") { |
|
m_sourceSyntax = Scan<bool>(value); |
|
} else if (key == "target-syntax") { |
|
m_targetSyntax = Scan<bool>(value); |
|
} else { |
|
StatelessFeatureFunction::SetParameter(key, value); |
|
} |
|
} |
|
|
|
void |
|
CountNonTerms:: |
|
Load(AllOptions::ptr const& opts) |
|
{ |
|
m_options = opts; |
|
} |
|
|
|
|
|
} |
|
|