read alignment info for memory pt

This commit is contained in:
Hieu Hoang 2016-08-26 12:13:35 +01:00
parent ff27b5e749
commit 370130c46e
2 changed files with 28 additions and 2 deletions

View File

@ -62,6 +62,29 @@ public:
m_alignTerm = AlignmentInfoCollection::Instance().Add(coll);
}
virtual void SetAlignmentInfo(const std::string &alignString)
{
AlignmentInfo::CollType alignTerm;
std::vector<std::string> toks = Tokenize(alignString);
for (size_t i = 0; i < toks.size(); ++i) {
std::vector<size_t> alignPair = Tokenize<size_t>(toks[i], "-");
UTIL_THROW_IF2(alignPair.size() != 2, "Wrong alignment format");
size_t sourcePos = alignPair[0];
size_t targetPos = alignPair[1];
alignTerm.insert(std::pair<size_t,size_t>(sourcePos, targetPos));
}
SetAlignTerm(alignTerm);
// cerr << "TargetPhrase::SetAlignmentInfo(const StringPiece &alignString) this:|" << *this << "|\n";
//cerr << "alignTerm=" << alignTerm.size() << endl;
//cerr << "alignNonTerm=" << alignNonTerm.size() << endl;
}
void OutputToStream(const Hypothesis &hypo, std::ostream &out) const
{
size_t size = PhraseImplTemplate<WORD>::GetSize();
@ -69,7 +92,6 @@ public:
(*this)[0].OutputToStream(out);
for (size_t i = 1; i < size; ++i) {
const WORD &word = (*this)[i];
out << " BOO:";
word.OutputToStream(out);
}
}

View File

@ -88,6 +88,8 @@ void PhraseTableMemory::Load(System &system)
target->GetScores().CreateFromString(toks[2], *this, system, true);
//cerr << "created scores:" << *target << endl;
target->SetAlignmentInfo(toks[3]);
// properties
if (toks.size() == 7) {
//target->properties = (char*) system.systemPool.Allocate(toks[6].size() + 1);
@ -106,7 +108,7 @@ void PhraseTableMemory::Load(System &system)
//cerr << "created source:" << *source << endl;
SCFG::TargetPhraseImpl *target = SCFG::TargetPhraseImpl::CreateFromString(systemPool, *this,
system, toks[1]);
target->SetAlignmentInfo(toks[3]);
//cerr << "created target " << *target << " source=" << *source << endl;
target->GetScores().CreateFromString(toks[2], *this, system, true);
@ -115,6 +117,8 @@ void PhraseTableMemory::Load(System &system)
//vector<SCORE> scores = Tokenize<SCORE>(toks[2]);
//target->sortScore = (scores.size() >= 3) ? TransformScore(scores[2]) : 0;
target->SetAlignmentInfo(toks[3]);
// properties
if (toks.size() == 7) {
//target->properties = (char*) system.systemPool.Allocate(toks[6].size() + 1);