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 }