00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef moses_PhraseDictionary_h
00023 #define moses_PhraseDictionary_h
00024
00025 #include <iostream>
00026 #include <map>
00027 #include <memory>
00028 #include <list>
00029 #include <vector>
00030 #include <string>
00031
00032 #ifdef WITH_THREADS
00033 #include <boost/thread/tss.hpp>
00034 #endif
00035
00036 #include "Phrase.h"
00037 #include "TargetPhrase.h"
00038 #include "Dictionary.h"
00039 #include "TargetPhraseCollection.h"
00040 #include "DecodeFeature.h"
00041
00042 namespace Moses
00043 {
00044
00045 class StaticData;
00046 class InputType;
00047 class WordsRange;
00048 class ChartTranslationOptionList;
00049 class ChartCellCollection;
00050 class TranslationSystem;
00051 class ChartRuleLookupManager;
00052
00053 class PhraseDictionaryFeature;
00054
00058 class PhraseDictionary: public Dictionary
00059 {
00060 public:
00061 PhraseDictionary(size_t numScoreComponent, const PhraseDictionaryFeature* feature):
00062 Dictionary(numScoreComponent), m_tableLimit(0), m_feature(feature) {}
00064 size_t GetTableLimit() const {
00065 return m_tableLimit;
00066 }
00067 DecodeType GetDecodeType() const {
00068 return Translate;
00069 }
00070 const PhraseDictionaryFeature* GetFeature() const;
00071
00073 virtual const TargetPhraseCollection *GetTargetPhraseCollection(const Phrase& src) const=0;
00075 virtual const TargetPhraseCollection *GetTargetPhraseCollection(InputType const& src,WordsRange const& range) const;
00077 virtual void InitializeForInput(InputType const& source) = 0;
00078
00080 virtual ChartRuleLookupManager *CreateRuleLookupManager(
00081 const InputType &,
00082 const ChartCellCollection &) = 0;
00083
00084 protected:
00085 size_t m_tableLimit;
00086 const PhraseDictionaryFeature* m_feature;
00087 };
00088
00089
00093 class PhraseDictionaryFeature : public DecodeFeature
00094 {
00095
00096
00097 public:
00098 PhraseDictionaryFeature( PhraseTableImplementation implementation
00099 , size_t numScoreComponent
00100 , unsigned numInputScores
00101 , const std::vector<FactorType> &input
00102 , const std::vector<FactorType> &output
00103 , const std::string &filePath
00104 , const std::vector<float> &weight
00105 , size_t tableLimit
00106 , const std::string &targetFile
00107 , const std::string &alignmentsFile);
00108
00109
00110 virtual ~PhraseDictionaryFeature();
00111
00112 virtual bool ComputeValueInTranslationOption() const;
00113
00114 std::string GetScoreProducerDescription(unsigned) const;
00115 std::string GetScoreProducerWeightShortName(unsigned idx=0) const;
00116
00117 size_t GetNumScoreComponents() const;
00118
00119 size_t GetNumInputScores() const;
00120
00121
00122 void InitDictionary(const TranslationSystem* system);
00123
00124
00125 void InitDictionary(const TranslationSystem* system,const InputType& source);
00126
00127
00128 const PhraseDictionary* GetDictionary() const;
00129
00130 private:
00132 PhraseDictionary* LoadPhraseTable(const TranslationSystem* system);
00133
00134 size_t m_numScoreComponent;
00135 unsigned m_numInputScores;
00136 std::string m_filePath;
00137 std::vector<float> m_weight;
00138 size_t m_tableLimit;
00139
00140
00141
00142
00143 std::auto_ptr<PhraseDictionary> m_threadSafePhraseDictionary;
00144 #ifdef WITH_THREADS
00145 boost::thread_specific_ptr<PhraseDictionary> m_threadUnsafePhraseDictionary;
00146 #else
00147 std::auto_ptr<PhraseDictionary> m_threadUnsafePhraseDictionary;
00148 #endif
00149
00150 bool m_useThreadSafePhraseDictionary;
00151 PhraseTableImplementation m_implementation;
00152 std::string m_targetFile;
00153 std::string m_alignmentsFile;
00154
00155 };
00156
00157
00158
00159 }
00160 #endif