| #include "GlueRuleSynthesizer.h" |
|
|
| #include <sstream> |
|
|
| #include "moses/FF/UnknownWordPenaltyProducer.h" |
| #include <boost/scoped_ptr.hpp> |
|
|
| namespace Moses |
| { |
| namespace Syntax |
| { |
| namespace T2S |
| { |
|
|
| void |
| GlueRuleSynthesizer:: |
| SynthesizeRule(const InputTree::Node &node) |
| { |
| const Word &sourceLhs = node.pvertex.symbol; |
| boost::scoped_ptr<Phrase> sourceRhs(SynthesizeSourcePhrase(node)); |
| TargetPhrase *tp = SynthesizeTargetPhrase(node, *sourceRhs); |
| TargetPhraseCollection::shared_ptr tpc |
| = GetOrCreateTargetPhraseCollection(m_ruleTrie, sourceLhs, *sourceRhs); |
| tpc->Add(tp); |
| } |
|
|
| Phrase* |
| GlueRuleSynthesizer:: |
| SynthesizeSourcePhrase(const InputTree::Node &node) |
| { |
| Phrase *phrase = new Phrase(node.children.size()); |
| for (std::vector<InputTree::Node*>::const_iterator p = node.children.begin(); |
| p != node.children.end(); ++p) { |
| phrase->AddWord((*p)->pvertex.symbol); |
| } |
| |
| |
| |
| |
| |
| return phrase; |
| } |
|
|
| TargetPhrase* |
| GlueRuleSynthesizer:: |
| SynthesizeTargetPhrase(const InputTree::Node &node, const Phrase &sourceRhs) |
| { |
| const UnknownWordPenaltyProducer &unknownWordPenaltyProducer = |
| UnknownWordPenaltyProducer::Instance(); |
|
|
| TargetPhrase *targetPhrase = new TargetPhrase(); |
|
|
| util::StringStream alignmentSS; |
| for (std::size_t i = 0; i < node.children.size(); ++i) { |
| const Word &symbol = node.children[i]->pvertex.symbol; |
| if (symbol.IsNonTerminal()) { |
| targetPhrase->AddWord(m_output_default_nonterminal); |
| } else { |
| |
| Word &targetWord = targetPhrase->AddWord(); |
| targetWord.CreateUnknownWord(symbol); |
| } |
| alignmentSS << i << "-" << i << " "; |
| } |
|
|
| |
| |
| float score = LOWEST_SCORE; |
| targetPhrase->GetScoreBreakdown().Assign(&unknownWordPenaltyProducer, score); |
| targetPhrase->EvaluateInIsolation(sourceRhs); |
| Word *targetLhs = new Word(m_output_default_nonterminal); |
| targetPhrase->SetTargetLHS(targetLhs); |
| targetPhrase->SetAlignmentInfo(alignmentSS.str()); |
|
|
| return targetPhrase; |
| } |
|
|
| } |
| } |
| } |
|
|