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 <ctime>
00028 #include "InputType.h"
00029 #include "Hypothesis.h"
00030 #include "StaticData.h"
00031 #include "TranslationOption.h"
00032 #include "TranslationOptionCollection.h"
00033 #include "TrellisPathList.h"
00034 #include "SquareMatrix.h"
00035 #include "WordsBitmap.h"
00036 #include "Search.h"
00037 #include "SearchCubePruning.h"
00038
00039 namespace Moses
00040 {
00041
00042 class SentenceStats;
00043 class TrellisPath;
00044 class TranslationOptionCollection;
00045
00047 struct SearchGraphNode {
00048 const Hypothesis* hypo;
00049 const Hypothesis* recombinationHypo;
00050 int forward;
00051 double fscore;
00052
00053 SearchGraphNode(const Hypothesis* theHypo,
00054 const Hypothesis* theRecombinationHypo,
00055 int theForward,
00056 double theFscore) :
00057 hypo(theHypo), recombinationHypo(theRecombinationHypo),
00058 forward(theForward), fscore(theFscore) {}
00059
00060 };
00061
00091 class Manager
00092 {
00093 Manager();
00094 Manager(Manager const&);
00095 void operator=(Manager const&);
00096 const TranslationSystem* m_system;
00097 protected:
00098
00099
00100 TranslationOptionCollection *m_transOptColl;
00101 Search *m_search;
00102
00103 HypothesisStack* actual_hypoStack;
00104 clock_t m_start;
00105 size_t interrupted_flag;
00106 std::auto_ptr<SentenceStats> m_sentenceStats;
00107 int m_hypoId;
00108
00109 void GetConnectedGraph(
00110 std::map< int, bool >* pConnected,
00111 std::vector< const Hypothesis* >* pConnectedList) const;
00112 void GetWinnerConnectedGraph(
00113 std::map< int, bool >* pConnected,
00114 std::vector< const Hypothesis* >* pConnectedList) const;
00115
00116
00117 public:
00118 InputType const& m_source;
00119 Manager(InputType const& source, SearchAlgorithm searchAlgorithm, const TranslationSystem* system);
00120 ~Manager();
00121 const TranslationOptionCollection* getSntTranslationOptions();
00122 const TranslationSystem* GetTranslationSystem() {
00123 return m_system;
00124 }
00125
00126 void ProcessSentence();
00127 const Hypothesis *GetBestHypothesis() const;
00128 const Hypothesis *GetActualBestHypothesis() const;
00129 void CalcNBest(size_t count, TrellisPathList &ret,bool onlyDistinct=0) const;
00130 void CalcLatticeSamples(size_t count, TrellisPathList &ret) const;
00131 void PrintAllDerivations(long translationId, std::ostream& outputStream) const;
00132 void printDivergentHypothesis(long translationId, const Hypothesis* hypo, const std::vector <const TargetPhrase*> & remainingPhrases, float remainingScore , std::ostream& outputStream) const;
00133 void printThisHypothesis(long translationId, const Hypothesis* hypo, const std::vector <const TargetPhrase* > & remainingPhrases, float remainingScore , std::ostream& outputStream) const;
00134 void GetWordGraph(long translationId, std::ostream &outputWordGraphStream) const;
00135 int GetNextHypoId();
00136 #ifdef HAVE_PROTOBUF
00137 void SerializeSearchGraphPB(long translationId, std::ostream& outputStream) const;
00138 #endif
00139
00140 void OutputSearchGraph(long translationId, std::ostream &outputSearchGraphStream) const;
00141 void GetSearchGraph(std::vector<SearchGraphNode>& searchGraph) const;
00142 const InputType& GetSource() const {
00143 return m_source;
00144 }
00145
00146
00147
00148
00149 void CalcDecoderStatistics() const;
00150 void ResetSentenceStats(const InputType& source);
00151 SentenceStats& GetSentenceStats() const;
00152
00153
00154
00155
00156 void GetForwardBackwardSearchGraph(std::map< int, bool >* pConnected,
00157 std::vector< const Hypothesis* >* pConnectedList, std::map < const Hypothesis*, std::set < const Hypothesis* > >* pOutgoingHyps, std::vector< float>* pFwdBwdScores) const;
00158
00159 };
00160
00161 }
00162 #endif