Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/moses2/FF/LexicalReordering/PhraseBasedReorderingState.cpp')
-rw-r--r--contrib/moses2/FF/LexicalReordering/PhraseBasedReorderingState.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/contrib/moses2/FF/LexicalReordering/PhraseBasedReorderingState.cpp b/contrib/moses2/FF/LexicalReordering/PhraseBasedReorderingState.cpp
new file mode 100644
index 000000000..c7d4abf03
--- /dev/null
+++ b/contrib/moses2/FF/LexicalReordering/PhraseBasedReorderingState.cpp
@@ -0,0 +1,86 @@
+/*
+ * PhraseLR.cpp
+ *
+ * Created on: 22 Mar 2016
+ * Author: hieu
+ */
+
+#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)
+{
+ // uninitialised
+ 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);
+}
+
+} /* namespace Moses2 */