00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef moses_Manager_h
00023 #define moses_Manager_h
00024
00025 #include <vector>
00026 #include <list>
00027 #include "InputType.h"
00028 #include "Hypothesis.h"
00029 #include "StaticData.h"
00030 #include "TranslationOption.h"
00031 #include "TranslationOptionCollection.h"
00032 #include "TrellisPathList.h"
00033 #include "SquareMatrix.h"
00034 #include "Bitmap.h"
00035 #include "Search.h"
00036 #include "SearchCubePruning.h"
00037 #include "BaseManager.h"
00038
00039 namespace Moses
00040 {
00041
00042 class SentenceStats;
00043 class TrellisPath;
00044 class TranslationOptionCollection;
00045 class LatticeMBRSolution;
00046
00048 struct SearchGraphNode {
00049 const Hypothesis* hypo;
00050 const Hypothesis* recombinationHypo;
00051 int forward;
00052 double fscore;
00053
00054 SearchGraphNode(const Hypothesis* theHypo,
00055 const Hypothesis* theRecombinationHypo,
00056 int theForward,
00057 double theFscore) :
00058 hypo(theHypo), recombinationHypo(theRecombinationHypo),
00059 forward(theForward), fscore(theFscore) {}
00060
00061 bool operator<(const SearchGraphNode& sgn) const {
00062 return this->hypo->GetId() < sgn.hypo->GetId();
00063 }
00064
00065 };
00066
00096 class Manager : public BaseManager
00097 {
00098 Manager();
00099 Manager(Manager const&);
00100 void operator=(Manager const&);
00101 private:
00102
00103
00104 void OutputFeatureWeightsForSLF(std::ostream &outputSearchGraphStream) const;
00105 size_t OutputFeatureWeightsForSLF(size_t index, const FeatureFunction* ff, std::ostream &outputSearchGraphStream) const;
00106 void OutputFeatureValuesForSLF(const Hypothesis* hypo, bool zeros, std::ostream &outputSearchGraphStream) const;
00107 size_t OutputFeatureValuesForSLF(size_t index, bool zeros, const Hypothesis* hypo, const FeatureFunction* ff, std::ostream &outputSearchGraphStream) const;
00108
00109
00110 void OutputFeatureValuesForHypergraph(const Hypothesis* hypo, std::ostream &outputSearchGraphStream) const;
00111
00112
00113 protected:
00114
00115 TranslationOptionCollection *m_transOptColl;
00116 Search *m_search;
00117
00118 HypothesisStack* actual_hypoStack;
00119 size_t interrupted_flag;
00120 std::auto_ptr<SentenceStats> m_sentenceStats;
00121 int m_hypoId;
00122
00123 void GetConnectedGraph(
00124 std::map< int, bool >* pConnected,
00125 std::vector< const Hypothesis* >* pConnectedList) const;
00126 void GetWinnerConnectedGraph(
00127 std::map< int, bool >* pConnected,
00128 std::vector< const Hypothesis* >* pConnectedList) const;
00129
00130
00131
00132 mutable std::ostringstream m_latticeNBestOut;
00133 mutable std::ostringstream m_alignmentOut;
00134 public:
00135 void OutputNBest(std::ostream& out, const Moses::TrellisPathList &nBestList) const;
00136 void OutputSurface(std::ostream &out,
00137 Hypothesis const& edge,
00138 bool const recursive=false) const;
00139
00140 void OutputAlignment(std::ostream &out, const AlignmentInfo &ai, size_t sourceOffset, size_t targetOffset) const;
00141 void OutputInput(std::ostream& os, const Hypothesis* hypo) const;
00142 void OutputInput(std::vector<const Phrase*>& map, const Hypothesis* hypo) const;
00143 void OutputPassthroughInformation(std::ostream& os, const Hypothesis* hypo) const;
00144
00145 std::map<size_t, const Factor*>
00146 GetPlaceholders(const Hypothesis &hypo, FactorType placeholderFactor) const;
00147
00148 void OutputWordGraph(std::ostream &outputWordGraphStream, const Hypothesis *hypo, size_t &linkId) const;
00149
00150 void OutputAlignment(std::ostringstream &out, const TrellisPath &path) const;
00151
00152 public:
00153
00154 Manager(ttasksptr const& ttask);
00155 ~Manager();
00156 const TranslationOptionCollection* getSntTranslationOptions();
00157
00158 void Decode();
00159 const Hypothesis *GetBestHypothesis() const;
00160 const Hypothesis *GetActualBestHypothesis() const;
00161 void CalcNBest(size_t count, TrellisPathList &ret,bool onlyDistinct=0) const;
00162 void CalcLatticeSamples(size_t count, TrellisPathList &ret) const;
00163 void PrintAllDerivations(long translationId, std::ostream& outputStream) const;
00164 void printDivergentHypothesis(long translationId, const Hypothesis* hypo, const std::vector <const TargetPhrase*> & remainingPhrases, float remainingScore , std::ostream& outputStream) const;
00165 void printThisHypothesis(long translationId, const Hypothesis* hypo, const std::vector <const TargetPhrase* > & remainingPhrases, float remainingScore , std::ostream& outputStream) const;
00166 void GetOutputLanguageModelOrder( std::ostream &out, const Hypothesis *hypo ) const;
00167 void GetWordGraph(long translationId, std::ostream &outputWordGraphStream) const;
00168 int GetNextHypoId();
00169
00170 void OutputLatticeMBRNBest(std::ostream& out, const std::vector<LatticeMBRSolution>& solutions,long translationId) const;
00171 void OutputBestHypo(const std::vector<Moses::Word>& mbrBestHypo, std::ostream& out) const;
00172 void OutputBestHypo(const Moses::TrellisPath &path, std::ostream &out) const;
00173
00174 #ifdef HAVE_PROTOBUF
00175 void SerializeSearchGraphPB(long translationId, std::ostream& outputStream) const;
00176 #endif
00177
00178 void OutputSearchGraph(long translationId, std::ostream &outputSearchGraphStream) const;
00179 void OutputSearchGraphAsSLF(long translationId, std::ostream &outputSearchGraphStream) const;
00180 void OutputSearchGraphAsHypergraph(std::ostream &outputSearchGraphStream) const;
00181 void GetSearchGraph(std::vector<SearchGraphNode>& searchGraph) const;
00182
00183 const InputType& GetSource() const;
00184
00185
00186
00187
00188 void CalcDecoderStatistics() const;
00189 void ResetSentenceStats(const InputType& source);
00190 SentenceStats& GetSentenceStats() const;
00191
00192
00193
00194
00195 void
00196 GetForwardBackwardSearchGraph
00197 ( std::map< int, bool >* pConnected,
00198 std::vector< const Hypothesis* >* pConnectedList,
00199 std::map < const Hypothesis*, std::set < const Hypothesis* > >* pOutgoingHyps,
00200 std::vector< float>* pFwdBwdScores) const;
00201
00202
00203 void OutputBest(OutputCollector *collector) const;
00204 void OutputNBest(OutputCollector *collector) const;
00205 void OutputAlignment(OutputCollector *collector) const;
00206 void OutputLatticeSamples(OutputCollector *collector) const;
00207 void OutputDetailedTranslationReport(OutputCollector *collector) const;
00208 void OutputUnknowns(OutputCollector *collector) const;
00209 void OutputDetailedTreeFragmentsTranslationReport(OutputCollector *collector) const {
00210 }
00211 void OutputWordGraph(OutputCollector *collector) const;
00212 void OutputSearchGraph(OutputCollector *collector) const;
00213 void OutputSearchGraphSLF() const;
00214
00215
00216 };
00217
00218 }
00219 #endif