|
#pragma once |
|
|
|
#include <string> |
|
#include <map> |
|
#include "StatefulFeatureFunction.h" |
|
#include "FFState.h" |
|
#include "moses/Phrase.h" |
|
|
|
namespace Moses |
|
{ |
|
class ConstrainedDecodingState : public FFState |
|
{ |
|
public: |
|
ConstrainedDecodingState() { |
|
} |
|
|
|
ConstrainedDecodingState(const Hypothesis &hypo); |
|
ConstrainedDecodingState(const ChartHypothesis &hypo); |
|
|
|
virtual size_t hash() const; |
|
virtual bool operator==(const FFState& other) const; |
|
|
|
const Phrase &GetPhrase() const { |
|
return m_outputPhrase; |
|
} |
|
|
|
protected: |
|
Phrase m_outputPhrase; |
|
}; |
|
|
|
|
|
|
|
|
|
class ConstrainedDecoding : public StatefulFeatureFunction |
|
{ |
|
public: |
|
ConstrainedDecoding(const std::string &line); |
|
|
|
void Load(AllOptions::ptr const& opts); |
|
|
|
bool IsUseable(const FactorMask &mask) const { |
|
return true; |
|
} |
|
|
|
FFState* EvaluateWhenApplied( |
|
const Hypothesis& cur_hypo, |
|
const FFState* prev_state, |
|
ScoreComponentCollection* accumulator) const; |
|
|
|
FFState* EvaluateWhenApplied( |
|
const ChartHypothesis& , |
|
int , |
|
ScoreComponentCollection* accumulator) const; |
|
|
|
virtual const FFState* EmptyHypothesisState(const InputType &input) const { |
|
return new ConstrainedDecodingState(); |
|
} |
|
|
|
std::vector<float> DefaultWeights() const; |
|
|
|
void SetParameter(const std::string& key, const std::string& value); |
|
|
|
protected: |
|
std::vector<std::string> m_paths; |
|
std::map<long, std::vector<Phrase> > m_constraints; |
|
int m_maxUnknowns; |
|
bool m_negate; |
|
bool m_soft; |
|
|
|
}; |
|
|
|
|
|
} |
|
|
|
|