void printTargetPhrase(const PHRASE &phraseS, const PHRASE &phraseT, const PhraseAlignment &bestAlignment, ostream &out) { // output target symbols, except root, in rule table format for (std::size_t i = 0; i < phraseT.size()-1; ++i) { const std::string &word = vcbT.getWord(phraseT[i]); if (!unpairedExtractFormatFlag || !isNonTerminal(word)) { out << word << " "; continue; } // get corresponding source non-terminal and output pair std::set<std::size_t> alignmentPoints = bestAlignment.alignedToT[i]; assert(alignmentPoints.size() == 1); int j = *(alignmentPoints.begin()); if (inverseFlag) { out << word << vcbS.getWord(phraseS[j]) << " "; } else { out << vcbS.getWord(phraseS[j]) << word << " "; } } // output target root symbol if (conditionOnTargetLhsFlag) { if (inverseFlag) { out << "[X]"; } else { out << vcbS.getWord(phraseS.back()); } } else { out << vcbT.getWord(phraseT.back()); } }
void printSourcePhrase(const PHRASE &phraseS, const PHRASE &phraseT, const PhraseAlignment &bestAlignment, ostream &out) { // output source symbols, except root, in rule table format for (int i = 0; i < phraseS.size()-1; ++i) { const std::string &word = vcbS.getWord(phraseS[i]); if (!stringToTreeFlag || !isNonTerminal(word)) { out << word << " "; continue; } // get corresponding target non-terminal and output pair std::set<size_t> alignmentPoints = bestAlignment.alignedToS[i]; assert(alignmentPoints.size() == 1); int j = *(alignmentPoints.begin()); if (inverseFlag) { out << vcbT.getWord(phraseT[j]) << word << " "; } else { out << word << vcbT.getWord(phraseT[j]) << " "; } } // output source root symbol out << vcbS.getWord(phraseS.back()); }