diff options
Diffstat (limited to 'decoder/scfg_translator.cc')
-rw-r--r-- | decoder/scfg_translator.cc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/decoder/scfg_translator.cc b/decoder/scfg_translator.cc index d978d8b9..646d67fa 100644 --- a/decoder/scfg_translator.cc +++ b/decoder/scfg_translator.cc @@ -103,6 +103,21 @@ struct SCFGTranslatorImpl { grammars.push_back(sup_grammar_); } + struct NameEquals { NameEquals(const string name) : name_(name) {} + bool operator()(const GrammarPtr& x) const { return x->GetGrammarName() == name_; } const string name_; }; + + void SetSentenceGrammarFromString(const std::string& grammar_str) { + assert( grammar_str != "" ); + if (!SILENT) cerr << "Setting sentence grammar" << endl; + usingSentenceGrammar = true; + istringstream in( grammar_str ); + TextGrammar* sent_grammar = new TextGrammar( &in ); + sent_grammar->SetMaxSpan( max_span_limit ); + sent_grammar->SetGrammarName( "__psg" ); + grammars.erase ( remove_if(grammars.begin(), grammars.end(), NameEquals("__psg")), grammars.end() ); + grammars.push_back( GrammarPtr(sent_grammar) ); + } + bool Translate(const string& input, SentenceMetadata* smeta, const vector<double>& weights, @@ -304,6 +319,10 @@ void SCFGTranslator::SetSupplementalGrammar(const std::string& grammar) { pimpl_->SetSupplementalGrammar(grammar); } +void SCFGTranslator::SetSentenceGrammarFromString(const std::string& grammar_str) { + pimpl_->SetSentenceGrammarFromString(grammar_str); +} + void SCFGTranslator::SentenceCompleteImpl() { if(usingSentenceGrammar) // Drop the last sentence grammar from the list of grammars |