|
#include "RuleGroup.h" |
|
|
|
namespace MosesTraining |
|
{ |
|
namespace Syntax |
|
{ |
|
namespace ScoreStsg |
|
{ |
|
|
|
void RuleGroup::SetNewSource(const StringPiece &source) |
|
{ |
|
source.CopyToString(&m_source); |
|
m_distinctRules.clear(); |
|
m_totalCount = 0; |
|
} |
|
|
|
void RuleGroup::AddRule(const StringPiece &target, const StringPiece &ntAlign, |
|
const StringPiece &fullAlign, int count, |
|
double treeScore) |
|
{ |
|
if (m_distinctRules.empty() || |
|
ntAlign != m_distinctRules.back().ntAlign || |
|
target != m_distinctRules.back().target) { |
|
DistinctRule r; |
|
target.CopyToString(&r.target); |
|
ntAlign.CopyToString(&r.ntAlign); |
|
r.alignments.resize(r.alignments.size()+1); |
|
fullAlign.CopyToString(&r.alignments.back().first); |
|
r.alignments.back().second = count; |
|
r.count = count; |
|
r.treeScore = treeScore; |
|
m_distinctRules.push_back(r); |
|
} else { |
|
DistinctRule &r = m_distinctRules.back(); |
|
if (r.alignments.back().first != fullAlign) { |
|
r.alignments.resize(r.alignments.size()+1); |
|
fullAlign.CopyToString(&r.alignments.back().first); |
|
} |
|
r.alignments.back().second += count; |
|
r.count += count; |
|
} |
|
m_totalCount += count; |
|
} |
|
|
|
} |
|
} |
|
} |
|
|