00001 // $Id$ 00002 00003 #ifndef moses_ConfusionNet_h 00004 #define moses_ConfusionNet_h 00005 00006 #include <vector> 00007 #include <iostream> 00008 #include "Word.h" 00009 #include "InputType.h" 00010 #include "NonTerminal.h" 00011 #include "util/exception.hh" 00012 00013 namespace Moses 00014 { 00015 00016 class FactorCollection; 00017 class TranslationOptionCollection; 00018 class Sentence; 00019 class TranslationTask; 00020 00024 class ConfusionNet : public InputType 00025 { 00026 public: 00027 typedef std::vector<std::pair<Word, ScorePair > > Column; 00028 00029 protected: 00030 std::vector<Column> data; 00031 NonTerminalSet m_defaultLabelSet; 00032 00033 bool ReadFormat0(std::istream&); 00034 bool ReadFormat1(std::istream&); 00035 void String2Word(const std::string& s,Word& w,const std::vector<FactorType>& factorOrder); 00036 00037 public: 00038 ConfusionNet(AllOptions::ptr const& opts); 00039 virtual ~ConfusionNet(); 00040 00041 ConfusionNet(Sentence const& s); 00042 00043 InputTypeEnum GetType() const { 00044 return ConfusionNetworkInput; 00045 } 00046 00047 const Column& GetColumn(size_t i) const { 00048 UTIL_THROW_IF2(i >= data.size(), 00049 "Out of bounds. Trying to access " << i 00050 << " when vector only contains " << data.size()); 00051 return data[i]; 00052 } 00053 const Column& operator[](size_t i) const { 00054 return GetColumn(i); 00055 } 00056 virtual size_t GetColumnIncrement(size_t i, size_t j) const; 00057 00058 bool Empty() const { 00059 return data.empty(); 00060 } 00061 size_t GetSize() const { 00062 return data.size(); 00063 } 00064 void Clear() { 00065 data.clear(); 00066 } 00067 00068 bool ReadF(std::istream&, int format=0); 00069 virtual void Print(std::ostream&) const; 00070 00071 int Read(std::istream& in); 00072 00073 Phrase GetSubString(const Range&) const; //TODO not defined 00074 std::string GetStringRep(const std::vector<FactorType> factorsToPrint) const; //TODO not defined 00075 const Word& GetWord(size_t pos) const; 00076 00077 TranslationOptionCollection* 00078 CreateTranslationOptionCollection(ttasksptr const& ttask) const; 00079 00080 const NonTerminalSet &GetLabelSet(size_t /*startPos*/, size_t /*endPos*/) const { 00081 return m_defaultLabelSet; 00082 } 00083 00084 00085 }; 00086 00087 std::ostream& operator<<(std::ostream& out,const ConfusionNet& cn); 00088 00089 00090 } 00091 00092 #endif