00001 #ifndef __PERMUTATIONSCORER_H__ 00002 #define __PERMUTATIONSCORER_H__ 00003 00004 #include <algorithm> 00005 #include <cmath> 00006 #include <iostream> 00007 #include <iterator> 00008 #include <set> 00009 #include <sstream> 00010 #include <stdexcept> 00011 #include <string> 00012 #include <vector> 00013 #include <climits> 00014 #include "Types.h" 00015 #include "ScoreData.h" 00016 #include "Scorer.h" 00017 #include "Permutation.h" 00018 #include "StatisticsBasedScorer.h" 00019 00020 namespace MosesTuning 00021 { 00022 00026 class PermutationScorer: public StatisticsBasedScorer 00027 { 00028 00029 public: 00030 PermutationScorer(const std::string &distanceMetric = "HAMMING", 00031 const std::string &config = std::string()); 00032 void setReferenceFiles(const std::vector<std::string>& referenceFiles); 00033 void prepareStats(size_t sid, const std::string& text, ScoreStats& entry); 00034 static const int SCORE_PRECISION; 00035 static const int SCORE_MULTFACT; 00036 00037 size_t NumberOfScores() const { 00038 //cerr << "PermutationScorer number of scores: 1" << endl; 00039 //return 1; 00040 00041 //cerr << "PermutationScorer number of scores: 2" << endl; 00042 //the second it is just a counter for the normalization of the amount of test sentences 00043 return 2; 00044 }; 00045 bool useAlignment() const { 00046 //cout << "PermutationScorer::useAlignment returning true" << endl; 00047 return true; 00048 }; 00049 00050 00051 protected: 00052 statscore_t calculateScore(const std::vector<ScoreStatsType>& scores) const; 00053 PermutationScorer(const PermutationScorer&); 00054 ~PermutationScorer() {}; 00055 PermutationScorer& operator=(const PermutationScorer&); 00056 int getNumberWords (const std::string & line) const; 00057 00058 distanceMetricReferenceChoice_t m_refChoiceStrategy; 00059 distanceMetric_t m_distanceMetric; 00060 00061 // data extracted from reference files 00062 // A vector of permutations for each reference file 00063 std::vector< std::vector<Permutation> > m_referencePerms; 00064 std::vector<size_t> m_sourceLengths; 00065 std::vector<std::string> m_referenceAlignments; 00066 00067 private: 00068 }; 00069 //TODO need to read in floats for scores - necessary for selecting mean reference strategy and for BLEU? 00070 00071 } 00072 00073 #endif //__PERMUTATIONSCORER_H 00074 00075