00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef moses_TranslationOptionCollection_h
00023 #define moses_TranslationOptionCollection_h
00024
00025 #include <list>
00026 #include "TypeDef.h"
00027 #include "TranslationOption.h"
00028 #include "TranslationOptionList.h"
00029 #include "SquareMatrix.h"
00030 #include "WordsBitmap.h"
00031 #include "PartialTranslOptColl.h"
00032 #include "DecodeStep.h"
00033
00034 namespace Moses
00035 {
00036
00037 class LanguageModel;
00038 class FactorCollection;
00039 class PhraseDictionaryMemory;
00040 class GenerationDictionary;
00041 class InputType;
00042 class LMList;
00043 class FactorMask;
00044 class Word;
00045
00060 class DecodeGraph;
00061
00062 class TranslationOptionCollection
00063 {
00064 friend std::ostream& operator<<(std::ostream& out, const TranslationOptionCollection& coll);
00065 TranslationOptionCollection(const TranslationOptionCollection&);
00066 protected:
00067 const TranslationSystem* m_system;
00068 std::vector< std::vector< TranslationOptionList > > m_collection;
00069 InputType const &m_source;
00070 SquareMatrix m_futureScore;
00071 const size_t m_maxNoTransOptPerCoverage;
00072 const float m_translationOptionThreshold;
00073 std::vector<Phrase*> m_unksrcs;
00074
00075
00076 TranslationOptionCollection(const TranslationSystem* system, InputType const& src, size_t maxNoTransOptPerCoverage,
00077 float translationOptionThreshold);
00078
00079 void CalcFutureScore();
00080
00082 void ProcessUnknownWord();
00084 virtual void ProcessOneUnknownWord(const Word &sourceWord, size_t sourcePos, size_t length = 1, const Scores *inputScores = NULL);
00086 void Prune();
00087
00089 void Sort();
00090
00092 TranslationOptionList &GetTranslationOptionList(size_t startPos, size_t endPos);
00093 const TranslationOptionList &GetTranslationOptionList(size_t startPos, size_t endPos) const;
00094 void Add(TranslationOption *translationOption);
00095
00097 virtual void ProcessUnknownWord(size_t sourcePos)=0;
00098 void CacheLexReordering();
00099
00100 public:
00101 virtual ~TranslationOptionCollection();
00102
00104 const InputType& GetSource() const {
00105 return m_source;
00106 }
00107
00109 size_t GetSize() const {
00110 return m_source.GetSize();
00111 };
00112
00114 virtual void CreateTranslationOptions();
00116 virtual void CreateTranslationOptionsForRange(const DecodeGraph &decodeStepList
00117 , size_t startPosition
00118 , size_t endPosition
00119 , bool adhereTableLimit);
00120
00122 virtual bool HasXmlOptionsOverlappingRange(size_t startPosition, size_t endPosition) const;
00123
00125 virtual void CreateXmlOptionsForRange(size_t startPosition, size_t endPosition);
00126
00127
00129 inline virtual const SquareMatrix &GetFutureScore() const {
00130 return m_futureScore;
00131 }
00132
00134 const TranslationOptionList &GetTranslationOptionList(const WordsRange &coverage) const {
00135 return GetTranslationOptionList(coverage.GetStartPos(), coverage.GetEndPos());
00136 }
00137
00138 TO_STRING();
00139 };
00140
00141 }
00142
00143 #endif
00144