|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "HReorderingForwardState.h" |
|
|
#include "../../InputPathBase.h" |
|
|
#include "../../PhraseBased/Manager.h" |
|
|
#include "../../PhraseBased/Hypothesis.h" |
|
|
|
|
|
namespace Moses2 |
|
|
{ |
|
|
|
|
|
HReorderingForwardState::HReorderingForwardState(const LRModel &config, |
|
|
size_t offset) : |
|
|
LRState(config, LRModel::Forward, offset), m_first(true) |
|
|
{ |
|
|
prevPath = NULL; |
|
|
m_coverage = NULL; |
|
|
} |
|
|
|
|
|
HReorderingForwardState::~HReorderingForwardState() |
|
|
{ |
|
|
|
|
|
} |
|
|
|
|
|
void HReorderingForwardState::Init(const LRState *prev, |
|
|
const TargetPhrase<Moses2::Word> &topt, const InputPathBase &path, bool first, |
|
|
const Bitmap *coverage) |
|
|
{ |
|
|
prevTP = &topt; |
|
|
prevPath = &path; |
|
|
m_first = first; |
|
|
m_coverage = coverage; |
|
|
} |
|
|
|
|
|
size_t HReorderingForwardState::hash() const |
|
|
{ |
|
|
size_t ret; |
|
|
ret = hash_value(prevPath->range); |
|
|
return ret; |
|
|
} |
|
|
|
|
|
bool HReorderingForwardState::operator==(const FFState& o) const |
|
|
{ |
|
|
if (&o == this) return true; |
|
|
|
|
|
HReorderingForwardState const& other = |
|
|
static_cast<HReorderingForwardState const&>(o); |
|
|
|
|
|
int compareScores = ( |
|
|
(prevPath->range == other.prevPath->range) ? |
|
|
ComparePrevScores(other.prevTP) : |
|
|
(prevPath->range < other.prevPath->range) ? -1 : 1); |
|
|
return compareScores == 0; |
|
|
} |
|
|
|
|
|
std::string HReorderingForwardState::ToString() const |
|
|
{ |
|
|
return "HReorderingForwardState " + SPrint(m_offset); |
|
|
} |
|
|
|
|
|
void HReorderingForwardState::Expand(const ManagerBase &mgr, |
|
|
const LexicalReordering &ff, const Hypothesis &hypo, size_t phraseTableInd, |
|
|
Scores &scores, FFState &state) const |
|
|
{ |
|
|
const Range &cur = hypo.GetInputPath().range; |
|
|
|
|
|
Manager &mgrCast = const_cast<Manager&>(static_cast<const Manager&>(mgr)); |
|
|
Bitmaps &bms = mgrCast.GetBitmaps(); |
|
|
const Bitmap &cov = bms.GetBitmap(*m_coverage, cur); |
|
|
|
|
|
if (!m_first) { |
|
|
LRModel::ReorderingType reoType; |
|
|
reoType = m_configuration.GetOrientation(prevPath->range, cur, cov); |
|
|
CopyScores(mgr.system, scores, hypo.GetTargetPhrase(), reoType); |
|
|
} |
|
|
|
|
|
HReorderingForwardState &stateCast = |
|
|
static_cast<HReorderingForwardState&>(state); |
|
|
stateCast.Init(this, hypo.GetTargetPhrase(), hypo.GetInputPath(), false, |
|
|
&cov); |
|
|
} |
|
|
|
|
|
} |
|
|
|