| |
| |
| |
| |
| |
| |
|
|
| #pragma once |
|
|
| #include <set> |
| #include <iostream> |
| #include "ConsistentPhrases.h" |
| #include "Rule.h" |
|
|
| extern bool g_debug; |
|
|
| class AlignedSentence; |
| class Parameter; |
|
|
| struct CompareRules { |
| bool operator()(const Rule *a, const Rule *b) { |
| int compare; |
|
|
| compare = a->GetPhrase(Moses::Input).Compare(b->GetPhrase(Moses::Input)); |
| if (compare) return compare < 0; |
|
|
| compare = a->GetPhrase(Moses::Output).Compare(b->GetPhrase(Moses::Output)); |
| if (compare) return compare < 0; |
|
|
| if (a->GetAlignments() != b->GetAlignments()) { |
| return a->GetAlignments() < b->GetAlignments(); |
| } |
|
|
| if (a->GetLHS().GetString() != b->GetLHS().GetString()) { |
| return a->GetLHS().GetString() < b->GetLHS().GetString(); |
| } |
|
|
| if (a->GetProperties() != b->GetProperties()) { |
| return a->GetProperties() < b->GetProperties(); |
| } |
|
|
| return false; |
| } |
| }; |
|
|
| class Rules |
| { |
| public: |
| Rules(const AlignedSentence &alignedSentence); |
| virtual ~Rules(); |
| void Extend(const Parameter ¶ms); |
| void Consolidate(const Parameter ¶ms); |
|
|
| std::string Debug() const; |
| void Output(std::ostream &out, bool forward, const Parameter ¶ms) const; |
|
|
| protected: |
| const AlignedSentence &m_alignedSentence; |
| std::set<Rule*> m_keepRules; |
| std::set<Rule*, CompareRules> m_mergeRules; |
|
|
| void Extend(const Rule &rule, const Parameter ¶ms); |
| void Extend(const Rule &rule, const ConsistentPhrases::Coll &cps, const Parameter ¶ms); |
| void Extend(const Rule &rule, const ConsistentPhrase &cp, const Parameter ¶ms); |
|
|
| |
| void CreateRules(const ConsistentPhrase &cp, |
| const Parameter ¶ms); |
| void CreateRule(const NonTerm &nonTerm, |
| const Parameter ¶ms); |
|
|
| void MergeRules(const Parameter ¶ms); |
| void CalcFractionalCount(); |
|
|
| }; |
|
|
|
|