00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef moses_TranslationOptionCollection_h
00024 #define moses_TranslationOptionCollection_h
00025
00026 #include <list>
00027 #include <boost/unordered_map.hpp>
00028 #include "TypeDef.h"
00029 #include "TranslationOption.h"
00030 #include "TranslationOptionList.h"
00031 #include "SquareMatrix.h"
00032 #include "Bitmap.h"
00033 #include "PartialTranslOptColl.h"
00034 #include "DecodeStep.h"
00035 #include "InputPath.h"
00036
00037 namespace Moses
00038 {
00039
00040 class LanguageModel;
00041 class FactorCollection;
00042 class GenerationDictionary;
00043 class InputType;
00044 class FactorMask;
00045 class Word;
00046 class DecodeGraph;
00047 class PhraseDictionary;
00048 class InputPath;
00049
00063 class TranslationOptionCollection
00064 {
00065 friend std::ostream& operator<<(std::ostream& out, const TranslationOptionCollection& coll);
00066 TranslationOptionCollection(const TranslationOptionCollection&);
00067 protected:
00068 ttaskwptr m_ttask;
00069 std::vector< std::vector< TranslationOptionList > > m_collection;
00070 InputType const &m_source;
00071 SquareMatrix m_estimatedScores;
00072 const size_t m_maxNoTransOptPerCoverage;
00073 const float m_translationOptionThreshold;
00074 size_t m_max_phrase_length;
00075 size_t max_partial_trans_opt;
00076 std::vector<const Phrase*> m_unksrcs;
00077 InputPathList m_inputPathQueue;
00078
00079 TranslationOptionCollection(ttasksptr const& ttask, InputType const& src);
00080
00081 void CalcEstimatedScore();
00082
00084 void ProcessUnknownWord();
00086 virtual void ProcessOneUnknownWord(const InputPath &inputPath, size_t sourcePos, size_t length = 1, const ScorePair *inputScores = NULL);
00087
00089 void Prune();
00090
00092 void Sort();
00093
00094 public:
00095
00096
00098 TranslationOptionList*
00099 GetTranslationOptionList(size_t startPos, size_t endPos);
00100
00101 TranslationOptionList const*
00102 GetTranslationOptionList(size_t startPos, size_t endPos) const;
00103
00104 protected:
00105 void Add(TranslationOption *translationOption);
00106
00108 virtual void ProcessUnknownWord(size_t sourcePos)=0;
00109
00110 void EvaluateWithSourceContext();
00111
00112 void EvaluateTranslationOptionListWithSourceContext(TranslationOptionList&);
00113
00114 void CacheLexReordering();
00115
00116 void GetTargetPhraseCollectionBatch();
00117
00118 bool CreateTranslationOptionsForRange(
00119 const DecodeGraph &decodeGraph
00120 , size_t startPos
00121 , size_t endPos
00122 , bool adhereTableLimit
00123 , size_t graphInd
00124 , InputPath &inputPath);
00125
00126 void SetInputScore(const InputPath &inputPath, PartialTranslOptColl &oldPtoc);
00127
00128 public:
00129 virtual ~TranslationOptionCollection();
00130
00132 const InputType& GetSource() const {
00133 return m_source;
00134 }
00135
00137 const std::vector<const Phrase*>& GetUnknownSources() const {
00138 return m_unksrcs;
00139 }
00140
00142 virtual void CreateTranslationOptions();
00143
00145 virtual
00146 bool
00147 CreateTranslationOptionsForRange
00148 (const DecodeGraph &decodeStepList,
00149 size_t startPosition, size_t endPosition,
00150 bool adhereTableLimit, size_t graphInd) = 0;
00151
00153 virtual
00154 bool
00155 HasXmlOptionsOverlappingRange(size_t startPosition,
00156 size_t endPosition) const;
00157
00159 virtual bool ViolatesXmlOptionsConstraint(size_t startPosition, size_t endPosition, TranslationOption *transOpt) const;
00160
00162 virtual void CreateXmlOptionsForRange(size_t startPosition, size_t endPosition);
00163
00164
00166 inline virtual const SquareMatrix &GetEstimatedScores() const {
00167 return m_estimatedScores;
00168 }
00169
00171 TranslationOptionList const*
00172 GetTranslationOptionList(const Range &coverage) const {
00173 return GetTranslationOptionList(coverage.GetStartPos(), coverage.GetEndPos());
00174 }
00175
00176 const InputPathList &GetInputPaths() const {
00177 return m_inputPathQueue;
00178 }
00179
00180 ttasksptr GetTranslationTask() const {
00181 return m_ttask.lock();
00182 }
00183 TO_STRING();
00184 };
00185
00186 }
00187
00188 #endif
00189