|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "PhraseBasedReorderingState.h" |
|
|
#include "LexicalReordering.h" |
|
|
#include "../../PhraseBased/Hypothesis.h" |
|
|
#include "../../InputPathBase.h" |
|
|
#include "../../PhraseBased/Manager.h" |
|
|
|
|
|
using namespace std; |
|
|
|
|
|
namespace Moses2 |
|
|
{ |
|
|
|
|
|
PhraseBasedReorderingState::PhraseBasedReorderingState(const LRModel &config, |
|
|
LRModel::Direction dir, size_t offset) : |
|
|
LRState(config, dir, offset) |
|
|
{ |
|
|
|
|
|
prevPath = NULL; |
|
|
prevTP = NULL; |
|
|
} |
|
|
|
|
|
void PhraseBasedReorderingState::Init(const LRState *prev, |
|
|
const TargetPhrase<Moses2::Word> &topt, const InputPathBase &path, bool first, |
|
|
const Bitmap *coverage) |
|
|
{ |
|
|
prevTP = &topt; |
|
|
prevPath = &path; |
|
|
m_first = first; |
|
|
} |
|
|
|
|
|
size_t PhraseBasedReorderingState::hash() const |
|
|
{ |
|
|
size_t ret; |
|
|
ret = (size_t) &prevPath->range; |
|
|
boost::hash_combine(ret, m_direction); |
|
|
|
|
|
return ret; |
|
|
} |
|
|
|
|
|
bool PhraseBasedReorderingState::operator==(const FFState& o) const |
|
|
{ |
|
|
if (&o == this) return true; |
|
|
|
|
|
const PhraseBasedReorderingState &other = |
|
|
static_cast<const PhraseBasedReorderingState&>(o); |
|
|
if (&prevPath->range == &other.prevPath->range) { |
|
|
if (m_direction == LRModel::Forward) { |
|
|
int compareScore = ComparePrevScores(other.prevTP); |
|
|
return compareScore == 0; |
|
|
} else { |
|
|
return true; |
|
|
} |
|
|
} else { |
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
void PhraseBasedReorderingState::Expand(const ManagerBase &mgr, |
|
|
const LexicalReordering &ff, const Hypothesis &hypo, size_t phraseTableInd, |
|
|
Scores &scores, FFState &state) const |
|
|
{ |
|
|
if ((m_direction != LRModel::Forward) || !m_first) { |
|
|
LRModel const& lrmodel = m_configuration; |
|
|
Range const &cur = hypo.GetInputPath().range; |
|
|
LRModel::ReorderingType reoType = ( |
|
|
m_first ? |
|
|
lrmodel.GetOrientation(cur) : |
|
|
lrmodel.GetOrientation(prevPath->range, cur)); |
|
|
CopyScores(mgr.system, scores, hypo.GetTargetPhrase(), reoType); |
|
|
} |
|
|
|
|
|
PhraseBasedReorderingState &stateCast = |
|
|
static_cast<PhraseBasedReorderingState&>(state); |
|
|
stateCast.Init(this, hypo.GetTargetPhrase(), hypo.GetInputPath(), false, |
|
|
NULL); |
|
|
} |
|
|
|
|
|
} |
|
|
|