|
#pragma once |
|
|
|
#include <vector> |
|
#include <string> |
|
#include <set> |
|
#include "StatefulFeatureFunction.h" |
|
#include "FFState.h" |
|
#include "moses/Phrase.h" |
|
#include "moses/Factor.h" |
|
#include "boost/unordered_map.hpp" |
|
|
|
namespace Moses |
|
{ |
|
|
|
|
|
|
|
class CoveredReferenceState : public FFState |
|
{ |
|
public: |
|
std::multiset<std::string> m_coveredRef; |
|
|
|
virtual size_t hash() const; |
|
virtual bool operator==(const FFState& other) const; |
|
|
|
}; |
|
|
|
class CoveredReferenceFeature : public StatefulFeatureFunction |
|
{ |
|
static std::multiset<std::string> GetWordsInPhrase(const Phrase &phr) { |
|
std::multiset<std::string> out; |
|
for (size_t i = 0; i < phr.GetSize(); i++) { |
|
out.insert(phr.GetFactor(i, 0)->GetString().as_string()); |
|
} |
|
return out; |
|
} |
|
|
|
std::string m_path; |
|
boost::unordered_map<long, std::multiset<std::string> > m_refs; |
|
|
|
public: |
|
CoveredReferenceFeature(const std::string &line) |
|
:StatefulFeatureFunction(1, line) { |
|
m_tuneable = true; |
|
ReadParameters(); |
|
} |
|
|
|
void Load(AllOptions::ptr const& opts); |
|
|
|
bool IsUseable(const FactorMask &mask) const { |
|
return true; |
|
} |
|
virtual const FFState* EmptyHypothesisState(const InputType &input) const { |
|
return new CoveredReferenceState(); |
|
} |
|
|
|
void EvaluateWithSourceContext(const InputType &input |
|
, const InputPath &inputPath |
|
, const TargetPhrase &targetPhrase |
|
, const StackVec *stackVec |
|
, ScoreComponentCollection &scoreBreakdown |
|
, ScoreComponentCollection *estimatedScores = NULL) const; |
|
|
|
FFState* EvaluateWhenApplied( |
|
const Hypothesis& cur_hypo, |
|
const FFState* prev_state, |
|
ScoreComponentCollection* accumulator) const; |
|
FFState* EvaluateWhenApplied( |
|
const ChartHypothesis& , |
|
int , |
|
ScoreComponentCollection* accumulator) const; |
|
|
|
void SetParameter(const std::string& key, const std::string& value); |
|
}; |
|
|
|
} |
|
|