00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef MERT_HYP_PACK_COLLECTION_H
00010 #define MERT_HYP_PACK_COLLECTION_H
00011
00012 #include <string>
00013 #include <vector>
00014 #include <utility>
00015 #include <cstddef>
00016
00017 #include "FeatureDataIterator.h"
00018 #include "ScoreDataIterator.h"
00019 #include "MiraFeatureVector.h"
00020
00021 namespace MosesTuning
00022 {
00023
00024
00025
00026
00027 class HypPackEnumerator
00028 {
00029 public:
00030 virtual ~HypPackEnumerator() {}
00031
00032 virtual void reset() = 0;
00033 virtual bool finished() = 0;
00034 virtual void next() = 0;
00035
00036 virtual std::size_t cur_id() = 0;
00037 virtual std::size_t cur_size() = 0;
00038 virtual std::size_t num_dense() const = 0;
00039 virtual const MiraFeatureVector& featuresAt(std::size_t i) = 0;
00040 virtual const ScoreDataItem& scoresAt(std::size_t i) = 0;
00041 };
00042
00043
00044
00045 class StreamingHypPackEnumerator : public HypPackEnumerator
00046 {
00047 public:
00048 StreamingHypPackEnumerator(std::vector<std::string> const& featureFiles,
00049 std::vector<std::string> const& scoreFiles);
00050
00051 virtual std::size_t num_dense() const;
00052
00053 virtual void reset();
00054 virtual bool finished();
00055 virtual void next();
00056
00057 virtual std::size_t cur_id();
00058 virtual std::size_t cur_size();
00059 virtual const MiraFeatureVector& featuresAt(std::size_t i);
00060 virtual const ScoreDataItem& scoresAt(std::size_t i);
00061
00062 private:
00063 void prime();
00064 std::size_t m_num_lists;
00065 std::size_t m_sentenceId;
00066 std::vector<std::string> m_featureFiles;
00067 std::vector<std::string> m_scoreFiles;
00068
00069 bool m_primed;
00070 int m_iNumDense;
00071 std::vector<FeatureDataIterator> m_featureDataIters;
00072 std::vector<ScoreDataIterator> m_scoreDataIters;
00073 std::vector<std::pair<std::size_t,std::size_t> > m_current_indexes;
00074 std::vector<MiraFeatureVector> m_current_featureVectors;
00075 };
00076
00077
00078
00079
00080 class RandomAccessHypPackEnumerator : public HypPackEnumerator
00081 {
00082 public:
00083 RandomAccessHypPackEnumerator(std::vector<std::string> const& featureFiles,
00084 std::vector<std::string> const& scoreFiles,
00085 bool no_shuffle);
00086
00087 virtual std::size_t num_dense() const;
00088
00089 virtual void reset();
00090 virtual bool finished();
00091 virtual void next();
00092
00093 virtual std::size_t cur_id();
00094 virtual std::size_t cur_size();
00095 virtual const MiraFeatureVector& featuresAt(std::size_t i);
00096 virtual const ScoreDataItem& scoresAt(std::size_t i);
00097
00098 private:
00099 bool m_no_shuffle;
00100 std::size_t m_cur_index;
00101 std::size_t m_num_dense;
00102 std::vector<std::size_t> m_indexes;
00103 std::vector<std::vector<MiraFeatureVector> > m_features;
00104 std::vector<std::vector<ScoreDataItem> > m_scores;
00105 };
00106
00107 }
00108
00109 #endif // MERT_HYP_PACK_COLLECTION_H
00110
00111
00112
00113
00114
00115