00001 #include "CountNonTerms.h" 00002 #include "moses/Util.h" 00003 #include "moses/TargetPhrase.h" 00004 00005 using namespace std; 00006 00007 namespace Moses 00008 { 00009 CountNonTerms::CountNonTerms(const std::string &line) 00010 :StatelessFeatureFunction(line,true) 00011 ,m_all(true) 00012 ,m_sourceSyntax(false) 00013 ,m_targetSyntax(false) 00014 { 00015 ReadParameters(); 00016 } 00017 00018 void CountNonTerms::EvaluateInIsolation(const Phrase &sourcePhrase 00019 , const TargetPhrase &targetPhrase 00020 , ScoreComponentCollection &scoreBreakdown 00021 , ScoreComponentCollection &estimatedScores) const 00022 { 00023 vector<float> scores(m_numScoreComponents, 0); 00024 size_t indScore = 0; 00025 00026 if (m_all) { 00027 for (size_t i = 0; i < targetPhrase.GetSize(); ++i) { 00028 const Word &word = targetPhrase.GetWord(i); 00029 if (word.IsNonTerminal()) { 00030 ++scores[indScore]; 00031 } 00032 } 00033 ++indScore; 00034 } 00035 00036 if (m_targetSyntax) { 00037 for (size_t i = 0; i < targetPhrase.GetSize(); ++i) { 00038 const Word &word = targetPhrase.GetWord(i); 00039 if (word.IsNonTerminal() && word != m_options->syntax.output_default_non_terminal) { 00040 ++scores[indScore]; 00041 } 00042 } 00043 ++indScore; 00044 } 00045 00046 if (m_sourceSyntax) { 00047 for (size_t i = 0; i < sourcePhrase.GetSize(); ++i) { 00048 const Word &word = sourcePhrase.GetWord(i); 00049 if (word.IsNonTerminal() && word != m_options->syntax.input_default_non_terminal) { 00050 ++scores[indScore]; 00051 } 00052 } 00053 ++indScore; 00054 } 00055 00056 scoreBreakdown.PlusEquals(this, scores); 00057 } 00058 00059 void CountNonTerms::SetParameter(const std::string& key, const std::string& value) 00060 { 00061 if (key == "all") { 00062 m_all = Scan<bool>(value); 00063 } else if (key == "source-syntax") { 00064 m_sourceSyntax = Scan<bool>(value); 00065 } else if (key == "target-syntax") { 00066 m_targetSyntax = Scan<bool>(value); 00067 } else { 00068 StatelessFeatureFunction::SetParameter(key, value); 00069 } 00070 } 00071 00072 void 00073 CountNonTerms:: 00074 Load(AllOptions::ptr const& opts) 00075 { 00076 m_options = opts; 00077 } 00078 00079 00080 }