mosesdecoder/phrase-extract/score-stsg/RuleGroup.cpp
2014-12-30 18:57:23 +00:00

48 lines
1.2 KiB
C++

#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;
}
} // namespace ScoreStsg
} // namespace Syntax
} // namespace MosesTraining