#ifndef PATH_TRIE_H #define PATH_TRIE_H #pragma once #include #include #include #include #include #include using FSTMATCH = fst::SortedMatcher; /* Trie tree for prefix storing and manipulating, with a dictionary in * finite-state transducer for spelling correction. */ class PathTrie { public: PathTrie(); ~PathTrie(); // get new prefix after appending new char PathTrie* get_path_trie(int new_char, bool reset = true); // get the prefix in index from root to current node PathTrie* get_path_vec(std::vector& output); // get the prefix in index from some stop node to current nodel PathTrie* get_path_vec(std::vector& output, int stop, size_t max_steps = std::numeric_limits::max()); // update log probs void iterate_to_vec(std::vector& output); // set dictionary for FST void set_dictionary(fst::StdVectorFst* dictionary); void set_matcher(std::shared_ptr matcher); bool is_empty() { return _ROOT == character; } // remove current path from root void remove(); float log_prob_b_prev; float log_prob_nb_prev; float log_prob_b_cur; float log_prob_nb_cur; float score; float approx_ctc; int character; PathTrie* parent; private: int _ROOT; bool _exists; bool _has_dictionary; std::vector> _children; // pointer to dictionary of FST fst::StdVectorFst* _dictionary; fst::StdVectorFst::StateId _dictionary_state; // true if finding ars in FST std::shared_ptr _matcher; }; #endif // PATH_TRIE_H