00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #pragma once
00023
00024 #include <map>
00025 #include <vector>
00026 #include <string>
00027 #include "moses/TranslationModel/PhraseDictionary.h"
00028 #include "OnDiskPt/OnDiskWrapper.h"
00029 #include "OnDiskPt/Word.h"
00030 #include "OnDiskPt/PhraseNode.h"
00031
00032 #ifdef WITH_THREADS
00033 #include <boost/thread/tss.hpp>
00034 #else
00035 #include <boost/scoped_ptr.hpp>
00036 #endif
00037
00038 namespace Moses
00039 {
00040 class TargetPhraseCollection;
00041 class DottedRuleStackOnDisk;
00042 class InputPath;
00043 class ChartParser;
00044
00047 class PhraseDictionaryOnDisk : public PhraseDictionary
00048 {
00049 typedef PhraseDictionary MyBase;
00050 friend std::ostream& operator<<(std::ostream&, const PhraseDictionaryOnDisk&);
00051 friend class ChartRuleLookupManagerOnDisk;
00052
00053 protected:
00054 #ifdef WITH_THREADS
00055 boost::thread_specific_ptr<OnDiskPt::OnDiskWrapper> m_implementation;
00056 #else
00057 boost::scoped_ptr<OnDiskPt::OnDiskWrapper> m_implementation;
00058 #endif
00059
00060 size_t m_maxSpanDefault, m_maxSpanLabelled;
00061
00062 OnDiskPt::OnDiskWrapper &GetImplementation();
00063 const OnDiskPt::OnDiskWrapper &GetImplementation() const;
00064
00065 void GetTargetPhraseCollectionBatch(InputPath &inputPath) const;
00066
00067 Moses::TargetPhrase *ConvertToMoses(const OnDiskPt::TargetPhrase &targetPhraseOnDisk
00068 , const std::vector<Moses::FactorType> &inputFactors
00069 , const std::vector<Moses::FactorType> &outputFactors
00070 , const OnDiskPt::Vocab &vocab
00071 , const Moses::PhraseDictionary &phraseDict
00072 , const std::vector<float> &weightT
00073 , bool isSyntax) const;
00074
00075 void ConvertToMoses(const OnDiskPt::Word &wordOnDisk,
00076 const std::vector<Moses::FactorType> &outputFactorsVec,
00077 const OnDiskPt::Vocab &vocab,
00078 Moses::Word &overwrite) const;
00079
00080 public:
00081 PhraseDictionaryOnDisk(const std::string &line);
00082 ~PhraseDictionaryOnDisk();
00083 void Load(AllOptions::ptr const& opts);
00084
00085
00086 virtual ChartRuleLookupManager *CreateRuleLookupManager(
00087 const ChartParser &parser,
00088 const ChartCellCollectionBase &,
00089 std::size_t);
00090
00091 virtual void InitializeForInput(ttasksptr const& ttask);
00092 void GetTargetPhraseCollectionBatch(const InputPathList &inputPathQueue) const;
00093
00094 TargetPhraseCollection::shared_ptr
00095 GetTargetPhraseCollection(const OnDiskPt::PhraseNode *ptNode) const;
00096
00097 TargetPhraseCollection::shared_ptr
00098 GetTargetPhraseCollectionNonCache(const OnDiskPt::PhraseNode *ptNode) const;
00099
00100 Moses::TargetPhraseCollection::shared_ptr
00101 ConvertToMoses(
00102 const OnDiskPt::TargetPhraseCollection::shared_ptr targetPhrasesOnDisk
00103 , const std::vector<Moses::FactorType> &inputFactors
00104 , const std::vector<Moses::FactorType> &outputFactors
00105 , const Moses::PhraseDictionary &phraseDict
00106 , const std::vector<float> &weightT
00107 , OnDiskPt::Vocab &vocab
00108 , bool isSyntax) const;
00109
00110 OnDiskPt::Word *ConvertFromMoses(OnDiskPt::OnDiskWrapper &wrapper, const std::vector<Moses::FactorType> &factorsVec
00111 , const Moses::Word &origWord) const;
00112
00113 void SetParameter(const std::string& key, const std::string& value);
00114
00115 };
00116
00117 }