00001
00002
00003
00004
00005
00006
00007
00008 #pragma once
00009
00010 #include <set>
00011 #include <iostream>
00012 #include "ConsistentPhrases.h"
00013 #include "Rule.h"
00014
00015 extern bool g_debug;
00016
00017 class AlignedSentence;
00018 class Parameter;
00019
00020 struct CompareRules {
00021 bool operator()(const Rule *a, const Rule *b) {
00022 int compare;
00023
00024 compare = a->GetPhrase(Moses::Input).Compare(b->GetPhrase(Moses::Input));
00025 if (compare) return compare < 0;
00026
00027 compare = a->GetPhrase(Moses::Output).Compare(b->GetPhrase(Moses::Output));
00028 if (compare) return compare < 0;
00029
00030 if (a->GetAlignments() != b->GetAlignments()) {
00031 return a->GetAlignments() < b->GetAlignments();
00032 }
00033
00034 if (a->GetLHS().GetString() != b->GetLHS().GetString()) {
00035 return a->GetLHS().GetString() < b->GetLHS().GetString();
00036 }
00037
00038 if (a->GetProperties() != b->GetProperties()) {
00039 return a->GetProperties() < b->GetProperties();
00040 }
00041
00042 return false;
00043 }
00044 };
00045
00046 class Rules
00047 {
00048 public:
00049 Rules(const AlignedSentence &alignedSentence);
00050 virtual ~Rules();
00051 void Extend(const Parameter ¶ms);
00052 void Consolidate(const Parameter ¶ms);
00053
00054 std::string Debug() const;
00055 void Output(std::ostream &out, bool forward, const Parameter ¶ms) const;
00056
00057 protected:
00058 const AlignedSentence &m_alignedSentence;
00059 std::set<Rule*> m_keepRules;
00060 std::set<Rule*, CompareRules> m_mergeRules;
00061
00062 void Extend(const Rule &rule, const Parameter ¶ms);
00063 void Extend(const Rule &rule, const ConsistentPhrases::Coll &cps, const Parameter ¶ms);
00064 void Extend(const Rule &rule, const ConsistentPhrase &cp, const Parameter ¶ms);
00065
00066
00067 void CreateRules(const ConsistentPhrase &cp,
00068 const Parameter ¶ms);
00069 void CreateRule(const NonTerm &nonTerm,
00070 const Parameter ¶ms);
00071
00072 void MergeRules(const Parameter ¶ms);
00073 void CalcFractionalCount();
00074
00075 };
00076