Lines Matching refs:label
44 void Replace(const vector<pair<typename Arc::Label, const Fst<Arc>* > >&,
45 MutableFst<Arc> *, typename Arc::Label, bool);
49 // user provides a set of Label, Fst pairs at construction. These are
51 // and doing RTN connection and specific Fst replacement by label or
57 typedef typename Arc::Label Label;
61 typedef pair<Label, const Fst<Arc>*> FstPair;
62 typedef pair<Label, MutableFst<Arc>*> MutableFstPair;
63 typedef unordered_map<Label, Label> NonTerminalHash;
67 Label root_label, bool epsilon_on_replace = false);
71 Label root_label, bool epsilon_on_replace = false);
75 const NonTerminalHash &nonterminal_hash, Label root_fst,
79 for (Label i = 0; i < fst_array_.size(); ++i)
94 for (Label i = 0; i < fst_array_.size(); ++i) {
108 void ReplaceLabels(const vector<Label> &labels);
128 // Returns Label, Fst pairs; Fst ownership retained by ReplaceUtil.
131 // Returns Label, MutableFst pairs; Fst ownership given to caller.
140 Label nnonterms; // # of non-terminals in Fst
144 map<Label, size_t> inref;
146 map<Label, size_t> outref;
171 bool GetTopOrder(const Fst<Arc> &fst, vector<Label> *toporder) const;
174 void UpdateStats(Label j);
176 Label root_label_; // root non-terminal
177 Label root_fst_; // root Fst ID
181 vector<Label> nonterminal_array_; // Fst ID to non-terminal
194 Label root_label, bool epsilon_on_replace)
202 for (Label i = 0; i < fst_pairs.size(); ++i) {
203 Label label = fst_pairs[i].first;
205 nonterminal_hash_[label] = fst_array_.size();
206 nonterminal_array_.push_back(label);
212 FSTERROR() << "ReplaceUtil: no root FST for label: " << root_label_;
218 Label root_label, bool epsilon_on_replace)
225 for (Label i = 0; i < fst_pairs.size(); ++i) {
226 Label label = fst_pairs[i].first;
228 nonterminal_hash_[label] = fst_array_.size();
229 nonterminal_array_.push_back(label);
234 FSTERROR() << "ReplaceUtil: no root FST for label: " << root_label_;
240 const NonTerminalHash &nonterminal_hash, Label root_fst,
249 for (Label i = 1; i < fst_array.size(); ++i)
270 for (Label i = 0; i < fst_array_.size(); ++i) {
280 for (Label i = 0; i < fst_array_.size(); ++i) {
300 Label j = it->second;
319 void ReplaceUtil<Arc>::UpdateStats(Label j) {
328 typedef typename map<Label, size_t>::iterator Iter;
332 Label i = in->first;
341 Label k = out->first;
350 Label k = out->first;
357 Label i = in->first;
368 for (Label i = 0; i < fst_array_.size(); ++i) {
384 for (Label i = 0; i < mutable_fst_array_.size(); ++i) {
391 for (Label i = 0; i < mutable_fst_array_.size(); ++i) {
404 vector<Label> *toporder) const {
412 LOG(WARNING) << "ReplaceUtil::GetTopOrder: Cyclical label dependencies";
417 for (Label i = 0; i < order.size(); ++i)
424 void ReplaceUtil<Arc>::ReplaceLabels(const vector<Label> &labels) {
426 unordered_set<Label> label_set;
427 for (Label i = 0; i < labels.size(); ++i)
439 Label label = nonterminal_array_[arc.nextstate];
440 if (label_set.count(label) > 0)
448 vector<Label> toporder;
456 for (Label o = toporder.size() - 1; o >= 0; --o) {
462 Label label = nonterminal_array_[arc.nextstate];
464 fst_pairs.push_back(make_pair(label, fst));
468 Label label = nonterminal_array_[s];
470 fst_pairs.push_back(make_pair(label, fst));
472 Replace(fst_pairs, mutable_fst_array_[s], label, epsilon_on_replace_);
480 vector<Label> labels;
483 vector<Label> toporder;
489 for (Label o = toporder.size() - 1; o >= 0; --o) {
490 Label j = toporder[o];
503 vector<Label> labels;
506 vector<Label> toporder;
511 for (Label
512 Label j = toporder[o];
525 for (Label i = 0; i < fst_array_.size(); ++i) {
526 Label label = nonterminal_array_[i];
530 fst_pairs->push_back(make_pair(label, fst));
539 for (Label i = 0; i < mutable_fst_array_.size(); ++i) {
540 Label label = nonterminal_array_[i];
544 mutable_fst_pairs->push_back(make_pair(label, fst->Copy()));