void MarkovSuf::Update(const MD & dat){ MD * prev = dat.prev(); if(!prev) init_(dat.value())+=1; else{ int oldx = prev->value(); int newx = dat.value(); trans_( oldx, newx) += 1; }}
void MarkovSuf::add_mixture_data(Ptr<MarkovData> dp, double prob){ uint now = dp->value(); MD * prev = dp->prev(); if(!prev) init_(now)+=prob; else{ uint then = prev->value(); trans_( then, now) += prob; } }
void icu_filter::next_token() { while (*source_) { auto tok = source_->next(); if (tok == "<s>" || tok == "</s>") { token_ = tok; return; } auto trans = trans_(tok); if (!trans.empty()) { token_ = trans; return; } } token_ = util::nullopt; }
void MarkovSuf::add_transition(uint from, uint to){ ++trans_(from,to); }