|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef MERT_FEATURE_DATA_ITERATOR_H_ |
|
#define MERT_FEATURE_DATA_ITERATOR_H_ |
|
|
|
|
|
|
|
|
|
|
|
#include <fstream> |
|
#include <map> |
|
#include <stdexcept> |
|
#include <vector> |
|
|
|
#include <boost/iterator/iterator_facade.hpp> |
|
#include <boost/shared_ptr.hpp> |
|
|
|
#include "util/exception.hh" |
|
#include "util/string_piece.hh" |
|
|
|
#include "FeatureStats.h" |
|
|
|
namespace util |
|
{ |
|
class FilePiece; |
|
} |
|
|
|
namespace MosesTuning |
|
{ |
|
|
|
|
|
class FileFormatException : public util::Exception |
|
{ |
|
public: |
|
explicit FileFormatException(const std::string& filename, const std::string& line) { |
|
*this << "Error in line \"" << line << "\" of " << filename; |
|
} |
|
}; |
|
|
|
|
|
|
|
int ParseInt(const StringPiece& str ); |
|
|
|
|
|
float ParseFloat(const StringPiece& str); |
|
|
|
|
|
class FeatureDataItem |
|
{ |
|
public: |
|
std::vector<float> dense; |
|
SparseVector sparse; |
|
}; |
|
|
|
bool operator==(FeatureDataItem const& item1, FeatureDataItem const& item2); |
|
std::size_t hash_value(FeatureDataItem const& item); |
|
|
|
class FeatureDataIterator : |
|
public boost::iterator_facade<FeatureDataIterator, |
|
const std::vector<FeatureDataItem>, |
|
boost::forward_traversal_tag> |
|
{ |
|
public: |
|
FeatureDataIterator(); |
|
explicit FeatureDataIterator(const std::string& filename); |
|
~FeatureDataIterator(); |
|
|
|
static FeatureDataIterator end() { |
|
return FeatureDataIterator(); |
|
} |
|
|
|
|
|
private: |
|
friend class boost::iterator_core_access; |
|
|
|
void increment(); |
|
bool equal(const FeatureDataIterator& rhs) const; |
|
const std::vector<FeatureDataItem>& dereference() const; |
|
|
|
void readNext(); |
|
|
|
boost::shared_ptr<util::FilePiece> m_in; |
|
std::vector<FeatureDataItem> m_next; |
|
}; |
|
|
|
} |
|
|
|
#endif |
|
|