File size: 1,921 Bytes
158b61b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
 * LRModel.h
 *
 *  Created on: 23 Mar 2016
 *      Author: hieu
 */
#pragma once
#include <string>

namespace Moses2
{

class MemPool;
class Range;
class Bitmap;
class LRState;
class LexicalReordering;

class LRModel
{
public:
  enum ModelType {
    Monotonic, MSD, MSLR, LeftRight, None
  };
  enum Direction {
    Forward, Backward, Bidirectional
  };
  enum Condition {
    F, E, FE
  };

  enum ReorderingType {
    M = 0, // monotonic
    NM = 1, // non-monotonic
    S = 1, // swap
    D = 2, // discontinuous
    DL = 2, // discontinuous, left
    DR = 3, // discontinuous, right
    R = 0, // right
    L = 1, // left
    MAX = 3, // largest possible
    NONE = 4  // largest possible
  };

  LRModel(const std::string &modelType, LexicalReordering &ff);
  virtual ~LRModel();

  ModelType GetModelType() const {
    return m_modelType;
  }
  Direction GetDirection() const {
    return m_direction;
  }
  Condition GetCondition() const {
    return m_condition;
  }

  bool IsPhraseBased() const {
    return m_phraseBased;
  }

  bool CollapseScores() const {
    return m_collapseScores;
  }

  size_t GetNumberOfTypes() const;

  LexicalReordering*
  GetScoreProducer() const {
    return m_scoreProducer;
  }

  LRState *CreateLRState(MemPool &pool) const;

  ReorderingType // for first phrase in phrase-based
  GetOrientation(Range const& cur) const;

  ReorderingType // for non-first phrases in phrase-based
  GetOrientation(Range const& prev, Range const& cur) const;

  ReorderingType // for HReorderingForwardState
  GetOrientation(Range const& prev, Range const& cur, Bitmap const& cov) const;

  ReorderingType // for HReorderingBackwarddState
  GetOrientation(int const reoDistance) const;

protected:

  ModelType m_modelType;
  bool m_phraseBased;
  bool m_collapseScores;
  Direction m_direction;
  Condition m_condition;
  LexicalReordering *m_scoreProducer;

};

} /* namespace Moses2 */