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 'moses/FF/PhraseOrientationFeature.h')
-rw-r--r--moses/FF/PhraseOrientationFeature.h58
1 files changed, 53 insertions, 5 deletions
diff --git a/moses/FF/PhraseOrientationFeature.h b/moses/FF/PhraseOrientationFeature.h
index 4d9dc20dc..c8bb8ceba 100644
--- a/moses/FF/PhraseOrientationFeature.h
+++ b/moses/FF/PhraseOrientationFeature.h
@@ -16,7 +16,7 @@
#include "StatefulFeatureFunction.h"
#include "FFState.h"
#include "moses/Factor.h"
-#include "phrase-extract/extract-ghkm/PhraseOrientation.h"
+#include "phrase-extract/PhraseOrientation.h"
#include "moses/PP/OrientationPhraseProperty.h"
#include <boost/unordered_set.hpp>
@@ -226,6 +226,54 @@ protected:
return CompareRightBoundaryRecursive(*prevState, *otherPrevState, useSparseNT);
};
+
+ static void HashCombineLeftBoundaryRecursive(size_t &hash, const PhraseOrientationFeatureState& state, bool useSparseNT) {
+ if (useSparseNT) {
+ boost::hash_combine(hash, state.m_leftBoundaryNonTerminalSymbol);
+ }
+ // boost::hash_combine(hash, state.m_leftBoundaryNonTerminalL2RHeuristicScoreIndex);
+ // boost::hash_combine(hash, state.m_leftBoundaryNonTerminalL2RPossibleFutureOrientations);
+
+ for (size_t i=0; i<state.m_leftBoundaryNonTerminalL2RScores.size(); ++i) {
+ if (state.m_leftBoundaryNonTerminalL2RPossibleFutureOrientations[i]) {
+ boost::hash_combine(hash, state.m_leftBoundaryNonTerminalL2RScores[i]);
+ } else {
+ boost::hash_combine(hash, 0);
+ }
+ }
+
+ if (!state.m_leftBoundaryRecursionGuard) {
+ const PhraseOrientationFeatureState *prevState = state.m_leftBoundaryPrevState;
+ if (prevState->m_leftBoundaryIsSet) {
+ HashCombineLeftBoundaryRecursive(hash, *prevState, useSparseNT);
+ }
+ }
+ };
+
+ static void HashCombineRightBoundaryRecursive(size_t &hash, const PhraseOrientationFeatureState& state, bool useSparseNT) {
+ if (useSparseNT) {
+ boost::hash_combine(hash, state.m_rightBoundaryNonTerminalSymbol);
+ }
+ // boost::hash_combine(hash, state.m_leftBoundaryNonTerminalL2RHeuristicScoreIndex);
+ // boost::hash_combine(hash, state.m_leftBoundaryNonTerminalL2RPossibleFutureOrientations);
+
+ for (size_t i=0; i<state.m_rightBoundaryNonTerminalR2LScores.size(); ++i) {
+ if (state.m_rightBoundaryNonTerminalR2LPossibleFutureOrientations[i]) {
+ boost::hash_combine(hash, state.m_rightBoundaryNonTerminalR2LScores[i]);
+ } else {
+ boost::hash_combine(hash, 0);
+ }
+ }
+
+ if (!state.m_rightBoundaryRecursionGuard) {
+ const PhraseOrientationFeatureState *prevState = state.m_rightBoundaryPrevState;
+ if (prevState->m_rightBoundaryIsSet) {
+ HashCombineRightBoundaryRecursive(hash, *prevState, useSparseNT);
+ }
+ }
+ };
+
+
template<std::size_t N> static bool Smaller(const std::bitset<N>& x, const std::bitset<N>& y) {
for (size_t i=0; i<N; ++i) {
if (x[i] ^ y[i])
@@ -264,8 +312,8 @@ public:
struct ReoClassData {
public:
- std::vector<MosesTraining::Syntax::GHKM::PhraseOrientation::REO_CLASS> nonTerminalReoClassL2R;
- std::vector<MosesTraining::Syntax::GHKM::PhraseOrientation::REO_CLASS> nonTerminalReoClassR2L;
+ std::vector<MosesTraining::PhraseOrientation::REO_CLASS> nonTerminalReoClassL2R;
+ std::vector<MosesTraining::PhraseOrientation::REO_CLASS> nonTerminalReoClassR2L;
bool firstNonTerminalIsBoundary;
bool firstNonTerminalPreviousSourceSpanIsAligned;
bool firstNonTerminalFollowingSourceSpanIsAligned;
@@ -289,7 +337,7 @@ public:
void SetParameter(const std::string& key, const std::string& value);
- void Load();
+ void Load(AllOptions::ptr const& opts);
void EvaluateInIsolation(const Phrase &source
, const TargetPhrase &targetPhrase
@@ -351,7 +399,7 @@ protected:
ScoreComponentCollection* scoreBreakdown,
const std::string* o) const;
- const std::string* ToString(const MosesTraining::Syntax::GHKM::PhraseOrientation::REO_CLASS o) const;
+ const std::string* ToString(const MosesTraining::PhraseOrientation::REO_CLASS o) const;
static const std::string MORIENT;
static const std::string SORIENT;