00001 #include "RuleGroup.h" 00002 00003 namespace MosesTraining 00004 { 00005 namespace Syntax 00006 { 00007 namespace ScoreStsg 00008 { 00009 00010 void RuleGroup::SetNewSource(const StringPiece &source) 00011 { 00012 source.CopyToString(&m_source); 00013 m_distinctRules.clear(); 00014 m_totalCount = 0; 00015 } 00016 00017 void RuleGroup::AddRule(const StringPiece &target, const StringPiece &ntAlign, 00018 const StringPiece &fullAlign, int count, 00019 double treeScore) 00020 { 00021 if (m_distinctRules.empty() || 00022 ntAlign != m_distinctRules.back().ntAlign || 00023 target != m_distinctRules.back().target) { 00024 DistinctRule r; 00025 target.CopyToString(&r.target); 00026 ntAlign.CopyToString(&r.ntAlign); 00027 r.alignments.resize(r.alignments.size()+1); 00028 fullAlign.CopyToString(&r.alignments.back().first); 00029 r.alignments.back().second = count; 00030 r.count = count; 00031 r.treeScore = treeScore; 00032 m_distinctRules.push_back(r); 00033 } else { 00034 DistinctRule &r = m_distinctRules.back(); 00035 if (r.alignments.back().first != fullAlign) { 00036 r.alignments.resize(r.alignments.size()+1); 00037 fullAlign.CopyToString(&r.alignments.back().first); 00038 } 00039 r.alignments.back().second += count; 00040 r.count += count; 00041 } 00042 m_totalCount += count; 00043 } 00044 00045 } // namespace ScoreStsg 00046 } // namespace Syntax 00047 } // namespace MosesTraining