mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-09-11 11:25:40 +03:00
79 lines
2.4 KiB
C++
79 lines
2.4 KiB
C++
#include "HReorderingForwardState.h"
|
|
|
|
namespace Moses
|
|
{
|
|
|
|
///////////////////////////
|
|
//HReorderingForwardState
|
|
|
|
HReorderingForwardState::
|
|
HReorderingForwardState(const LRModel &config,
|
|
size_t size, size_t offset)
|
|
: LRState(config, LRModel::Forward, offset)
|
|
, m_first(true)
|
|
, m_prevRange(NOT_FOUND,NOT_FOUND)
|
|
, m_coverage(size)
|
|
{ }
|
|
|
|
HReorderingForwardState::
|
|
HReorderingForwardState(const HReorderingForwardState *prev,
|
|
const TranslationOption &topt)
|
|
: LRState(prev, topt)
|
|
, m_first(false)
|
|
, m_prevRange(topt.GetSourceWordsRange())
|
|
, m_coverage(prev->m_coverage, topt.GetSourceWordsRange())
|
|
{
|
|
}
|
|
|
|
size_t HReorderingForwardState::hash() const
|
|
{
|
|
size_t ret;
|
|
ret = hash_value(m_prevRange);
|
|
return ret;
|
|
}
|
|
|
|
bool HReorderingForwardState::operator==(const FFState& o) const
|
|
{
|
|
if (&o == this) return true;
|
|
|
|
HReorderingForwardState const& other
|
|
= static_cast<HReorderingForwardState const&>(o);
|
|
|
|
int compareScores = ((m_prevRange == other.m_prevRange)
|
|
? ComparePrevScores(other.m_prevOption)
|
|
: (m_prevRange < other.m_prevRange) ? -1 : 1);
|
|
return compareScores == 0;
|
|
}
|
|
|
|
// For compatibility with the phrase-based reordering model, scoring is one
|
|
// step delayed.
|
|
// The forward model takes determines orientations heuristically as follows:
|
|
// mono: if the next phrase comes after the conditioning phrase and
|
|
// - there is a gap to the right of the conditioning phrase, or
|
|
// - the next phrase immediately follows it
|
|
// swap: if the next phrase goes before the conditioning phrase and
|
|
// - there is a gap to the left of the conditioning phrase, or
|
|
// - the next phrase immediately precedes it
|
|
// dright: if the next phrase follows the conditioning phrase and other
|
|
// stuff comes in between
|
|
// dleft: if the next phrase precedes the conditioning phrase and other
|
|
// stuff comes in between
|
|
|
|
LRState*
|
|
HReorderingForwardState::
|
|
Expand(TranslationOption const& topt, InputType const& input,
|
|
ScoreComponentCollection* scores) const
|
|
{
|
|
const Range cur = topt.GetSourceWordsRange();
|
|
// keep track of the current coverage ourselves so we don't need the hypothesis
|
|
Bitmap cov(m_coverage, cur);
|
|
if (!m_first) {
|
|
LRModel::ReorderingType reoType;
|
|
reoType = m_configuration.GetOrientation(m_prevRange,cur,cov);
|
|
CopyScores(scores, topt, input, reoType);
|
|
}
|
|
return new HReorderingForwardState(this, topt);
|
|
}
|
|
|
|
}
|