00001 #pragma once 00002 00003 #include <cmath> 00004 #include <string> 00005 00006 #include "OutputFileStream.h" 00007 00008 #include "Options.h" 00009 #include "TokenizedRuleHalf.h" 00010 00011 namespace MosesTraining 00012 { 00013 namespace Syntax 00014 { 00015 namespace ScoreStsg 00016 { 00017 00018 class RuleTableWriter 00019 { 00020 public: 00021 RuleTableWriter(const Options &options, Moses::OutputFileStream &out) 00022 : m_options(options) 00023 , m_out(out) {} 00024 00025 void WriteLine(const TokenizedRuleHalf &, const TokenizedRuleHalf &, 00026 const std::string &, double, double, int, int, int); 00027 00028 private: 00029 double MaybeLog(double a) const { 00030 if (!m_options.logProb) { 00031 return a; 00032 } 00033 return m_options.negLogProb ? -log(a) : log(a); 00034 } 00035 00036 void WriteRuleHalf(const TokenizedRuleHalf &); 00037 00038 const Options &m_options; 00039 Moses::OutputFileStream &m_out; 00040 }; 00041 00042 } // namespace ScoreStsg 00043 } // namespace Syntax 00044 } // namespace MosesTraining