| |
| |
| |
| |
| |
| |
| #pragma once |
| #include <vector> |
| #include "Phrase.h" |
| #include "RulePhrase.h" |
| #include "Property.h" |
| #include "moses/TypeDef.h" |
|
|
| class ConsistentPhrase; |
| class AlignedSentence; |
| class NonTerm; |
| class Parameter; |
|
|
|
|
| class Rule |
| { |
| public: |
| typedef std::set<std::pair<int,int> > Alignments; |
| typedef std::vector<Property> Properties; |
|
|
| Rule(const Rule ©); |
|
|
| |
| Rule(const NonTerm &lhsNonTerm, const AlignedSentence &alignedSentence); |
|
|
| |
| Rule(const Rule ©, const NonTerm &nonTerm); |
|
|
| virtual ~Rule(); |
|
|
| bool IsValid() const { |
| return m_isValid; |
| } |
|
|
| bool CanRecurse() const { |
| return m_canRecurse; |
| } |
|
|
| const NonTerm &GetLHS() const { |
| return m_lhs; |
| } |
|
|
| const ConsistentPhrase &GetConsistentPhrase() const; |
|
|
| int GetNextSourcePosForNonTerm() const; |
|
|
| void SetCount(float count) { |
| m_count = count; |
| } |
| float GetCount() const { |
| return m_count; |
| } |
|
|
| const Alignments &GetAlignments() const { |
| return m_alignments; |
| } |
|
|
| const Properties &GetProperties() const { |
| return m_properties; |
| } |
|
|
| std::string Debug() const; |
| void Output(std::ostream &out, bool forward) const; |
|
|
| void Prevalidate(const Parameter ¶ms); |
| void CreateTarget(const Parameter ¶ms); |
| void CreateProperties(const Parameter ¶ms); |
|
|
| const RulePhrase &GetPhrase(Moses::FactorDirection direction) const { |
| return (direction == Moses::Input) ? m_source : m_target; |
| } |
|
|
| protected: |
| const NonTerm &m_lhs; |
| const AlignedSentence &m_alignedSentence; |
| RulePhrase m_source, m_target; |
| float m_count; |
|
|
| Alignments m_alignments; |
|
|
| |
| std::vector<const NonTerm*> m_nonterms; |
|
|
| bool m_isValid, m_canRecurse; |
|
|
| |
| Properties m_properties; |
|
|
| void CreateSource(); |
| void CreateAlignments(); |
| void CreateAlignments(int sourcePos, const std::set<const Word *> &targetWords); |
| void CreateAlignments(int sourcePos, const RuleSymbol *targetSought); |
|
|
| bool ContainTerm(const ConsistentPhrase &cp, const std::set<const Word*> &terms) const; |
| int GetScope(const Parameter ¶ms) const; |
|
|
| void NonTermContext(int sourceTarget, int factors, size_t ntInd, const ConsistentPhrase &cp, std::ostream &out) const; |
| |
|
|
| void NonTermContextFactor(int factor, const Word &word, std::ostream &out) const; |
|
|
| }; |
|
|
|
|