void ScfgRuleWriter::Write(const ScfgRule &rule) { std::ostringstream sourceSS; std::ostringstream targetSS; if (m_options.unpairedExtractFormat) { WriteUnpairedFormat(rule, sourceSS, targetSS); } else { WriteStandardFormat(rule, sourceSS, targetSS); } // Write the rule to the forward and inverse extract files. m_fwd << sourceSS.str() << " ||| " << targetSS.str() << " |||"; m_inv << targetSS.str() << " ||| " << sourceSS.str() << " |||"; const Alignment &alignment = rule.GetAlignment(); for (Alignment::const_iterator p = alignment.begin(); p != alignment.end(); ++p) { m_fwd << " " << p->first << "-" << p->second; m_inv << " " << p->second << "-" << p->first; } // Write a count of 1 and an empty NT length column to the forward extract // file. // TODO Add option to write NT length? m_fwd << " ||| 1 ||| |||"; if (m_options.pcfg) { // Write the PCFG score. m_fwd << " " << std::exp(rule.GetPcfgScore()); } m_fwd << std::endl; // Write a count of 1 to the inverse extract file. m_inv << " ||| 1" << std::endl; }
void ScfgRuleWriter::Write(const ScfgRule &rule, bool printEndl) { std::ostringstream sourceSS; std::ostringstream targetSS; if (m_options.unpairedExtractFormat) { WriteUnpairedFormat(rule, sourceSS, targetSS); } else { WriteStandardFormat(rule, sourceSS, targetSS); } // Write the rule to the forward and inverse extract files. m_fwd << sourceSS.str() << " ||| " << targetSS.str() << " |||"; m_inv << targetSS.str() << " ||| " << sourceSS.str() << " |||"; const Alignment &alignment = rule.GetAlignment(); for (Alignment::const_iterator p = alignment.begin(); p != alignment.end(); ++p) { m_fwd << " " << p->first << "-" << p->second; m_inv << " " << p->second << "-" << p->first; } // Write a count of 1. m_fwd << " ||| 1"; m_inv << " ||| 1"; // Write the PCFG score (if requested). if (m_options.pcfg) { m_fwd << " ||| " << std::exp(rule.GetPcfgScore()); } if (printEndl) { m_fwd << std::endl; m_inv << std::endl; } }
void ScfgRuleWriter::Write(const ScfgRule &rule, size_t lineNum, bool printEndl) { std::ostringstream sourceSS; std::ostringstream targetSS; if (m_options.unpairedExtractFormat) { WriteUnpairedFormat(rule, sourceSS, targetSS); } else { WriteStandardFormat(rule, sourceSS, targetSS); } // Write the rule to the forward and inverse extract files. if (m_options.t2s) { // If model is tree-to-string then flip the source and target. m_fwd << targetSS.str() << " ||| " << sourceSS.str() << " |||"; m_inv << sourceSS.str() << " ||| " << targetSS.str() << " |||"; } else { m_fwd << sourceSS.str() << " ||| " << targetSS.str() << " |||"; m_inv << targetSS.str() << " ||| " << sourceSS.str() << " |||"; } const Alignment &alignment = rule.GetAlignment(); for (Alignment::const_iterator p = alignment.begin(); p != alignment.end(); ++p) { if (m_options.t2s) { // If model is tree-to-string then flip the source and target. m_fwd << " " << p->second << "-" << p->first; m_inv << " " << p->first << "-" << p->second; } else { m_fwd << " " << p->first << "-" << p->second; m_inv << " " << p->second << "-" << p->first; } } if (m_options.includeSentenceId) { if (m_options.t2s) { m_inv << " ||| " << lineNum; } else { m_fwd << " ||| " << lineNum; } } // Write a count of 1. m_fwd << " ||| 1"; m_inv << " ||| 1"; // Write the PCFG score (if requested). if (m_options.pcfg) { m_fwd << " ||| " << std::exp(rule.GetPcfgScore()); } m_fwd << " |||"; if (m_options.sourceLabels && rule.HasSourceLabels()) { m_fwd << " {{SourceLabels"; rule.PrintSourceLabels(m_fwd); m_fwd << "}}"; } if (printEndl) { m_fwd << std::endl; m_inv << std::endl; } }