File size: 1,885 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 |
/*
* Rules.h
*
* Created on: 20 Feb 2014
* Author: hieu
*/
#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);
// create original rules
void CreateRules(const ConsistentPhrase &cp,
const Parameter ¶ms);
void CreateRule(const NonTerm &nonTerm,
const Parameter ¶ms);
void MergeRules(const Parameter ¶ms);
void CalcFractionalCount();
};
|