00001 // -*- c++ -*- 00002 #pragma once 00003 00004 #include <iostream> 00005 #include <string> 00006 #include "ScoreComponentCollection.h" 00007 #include "InputType.h" 00008 #include "moses/parameters/AllOptions.h" 00009 namespace Moses 00010 { 00011 class ScoreComponentCollection; 00012 class FeatureFunction; 00013 class OutputCollector; 00014 00015 class BaseManager 00016 { 00017 protected: 00018 // const InputType &m_source; /**< source sentence to be translated */ 00019 ttaskwptr m_ttask; 00020 InputType const& m_source; 00021 00022 BaseManager(ttasksptr const& ttask); 00023 00024 // output 00025 typedef std::vector<std::pair<Moses::Word, Moses::Range> > ApplicationContext; 00026 typedef std::set< std::pair<size_t, size_t> > Alignments; 00027 00028 void OutputSurface(std::ostream &out, Phrase const& phrase) const; 00029 00030 void WriteApplicationContext(std::ostream &out, 00031 const ApplicationContext &context) const; 00032 00033 template <class T> 00034 void ShiftOffsets(std::vector<T> &offsets, T shift) const { 00035 T currPos = shift; 00036 for (size_t i = 0; i < offsets.size(); ++i) { 00037 if (offsets[i] == 0) { 00038 offsets[i] = currPos; 00039 ++currPos; 00040 } else { 00041 currPos += offsets[i]; 00042 } 00043 } 00044 } 00045 00046 public: 00047 virtual ~BaseManager() { } 00048 00050 const InputType& GetSource() const; 00051 const ttasksptr GetTtask() const; 00052 AllOptions::ptr const& options() const; 00053 00054 virtual void Decode() = 0; 00055 // outputs 00056 virtual void OutputBest(OutputCollector *collector) const = 0; 00057 virtual void OutputNBest(OutputCollector *collector) const = 0; 00058 virtual void OutputLatticeSamples(OutputCollector *collector) const = 0; 00059 virtual void OutputAlignment(OutputCollector *collector) const = 0; 00060 virtual void OutputDetailedTranslationReport(OutputCollector *collector) const = 0; 00061 virtual void OutputDetailedTreeFragmentsTranslationReport(OutputCollector *collector) const = 0; 00062 virtual void OutputWordGraph(OutputCollector *collector) const = 0; 00063 virtual void OutputSearchGraph(OutputCollector *collector) const = 0; 00064 virtual void OutputUnknowns(OutputCollector *collector) const = 0; 00065 virtual void OutputSearchGraphSLF() const = 0; 00066 // virtual void OutputSearchGraphHypergraph() const = 0; 00067 00068 virtual void OutputSearchGraphAsHypergraph(std::ostream& out) const; 00069 virtual void OutputSearchGraphAsHypergraph(std::string const& fname, 00070 size_t const precision) const; 00071 /*** 00072 * to be called after processing a sentence 00073 */ 00074 virtual void CalcDecoderStatistics() const = 0; 00075 00076 }; 00077 00078 }