Download tools/mosesdecoder/moses2/SCFG/Stack.cpp from Quagmire1/wiki-cased: direct link, hf CLI and curl.
- Browser
- Download file 2.39 kB
-
https://huggingface.co/Quagmire1/wiki-cased/resolve/main/tools/mosesdecoder/moses2/SCFG/Stack.cpp
- Command line
-
hf download hf://Quagmire1/wiki-cased/tools/mosesdecoder/moses2/SCFG/Stack.cpp
-
curl -L -o Stack.cpp https://huggingface.co/Quagmire1/wiki-cased/resolve/main/tools/mosesdecoder/moses2/SCFG/Stack.cpp
2.39 kB
| using namespace std; | |
| namespace Moses2 | |
| { | |
| namespace SCFG | |
| { | |
| Stack::Stack(const Manager &mgr) | |
| :m_mgr(mgr) | |
| { | |
| } | |
| Stack::~Stack() | |
| { | |
| BOOST_FOREACH (const Coll::value_type &valPair, m_coll) { | |
| Moses2::HypothesisColl *hypos = valPair.second; | |
| delete hypos; | |
| } | |
| } | |
| void Stack::Add(SCFG::Hypothesis *hypo, Recycler<HypothesisBase*> &hypoRecycle, | |
| ArcLists &arcLists) | |
| { | |
| const SCFG::TargetPhraseImpl &tp = hypo->GetTargetPhrase(); | |
| const SCFG::Word &lhs = tp.lhs; | |
| //cerr << "lhs=" << lhs << endl; | |
| HypothesisColl &coll = GetColl(lhs); | |
| coll.Add(m_mgr, hypo, hypoRecycle, arcLists); | |
| } | |
| size_t Stack::GetSize() const | |
| { | |
| size_t ret = 0; | |
| BOOST_FOREACH (const Coll::value_type &valPair, m_coll) { | |
| Moses2::HypothesisColl &hypos = *valPair.second; | |
| ret += hypos.GetSize(); | |
| } | |
| return ret; | |
| } | |
| const Moses2::HypothesisColl *Stack::GetColl(const SCFG::Word &nt) const | |
| { | |
| assert(nt.isNonTerminal); | |
| Coll::const_iterator iter = m_coll.find(nt); | |
| if (iter != m_coll.end()) { | |
| return NULL; | |
| } else { | |
| return iter->second; | |
| } | |
| } | |
| Moses2::HypothesisColl &Stack::GetColl(const SCFG::Word &nt) | |
| { | |
| Moses2::HypothesisColl *ret; | |
| Coll::iterator iter; | |
| iter = m_coll.find(nt); | |
| if (iter == m_coll.end()) { | |
| ret = new Moses2::HypothesisColl(m_mgr); | |
| m_coll[nt] = ret; | |
| } else { | |
| ret = iter->second; | |
| } | |
| return *ret; | |
| } | |
| const Hypothesis *Stack::GetBestHypo() const | |
| { | |
| SCORE bestScore = -std::numeric_limits<SCORE>::infinity(); | |
| const HypothesisBase *bestHypo = NULL; | |
| BOOST_FOREACH(const Coll::value_type &val, m_coll) { | |
| const Moses2::HypothesisColl &hypos = *val.second; | |
| const Moses2::HypothesisBase *hypo = hypos.GetBestHypo(); | |
| if (hypo->GetFutureScore() > bestScore) { | |
| bestScore = hypo->GetFutureScore(); | |
| bestHypo = hypo; | |
| } | |
| } | |
| return &bestHypo->Cast<SCFG::Hypothesis>(); | |
| } | |
| std::string Stack::Debug(const System &system) const | |
| { | |
| stringstream out; | |
| BOOST_FOREACH (const SCFG::Stack::Coll::value_type &valPair, m_coll) { | |
| const SCFG::Word &lhs = valPair.first; | |
| const Moses2::HypothesisColl &hypos = *valPair.second; | |
| out << "lhs=" << lhs.Debug(system); | |
| out << "=" << hypos.GetSize() << endl; | |
| out << hypos.Debug(system); | |
| out << endl; | |
| } | |
| return out.str(); | |
| } | |
| } | |
| } | |