diff options
Diffstat (limited to 'decoder')
| -rw-r--r-- | decoder/dict.h | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/decoder/dict.h b/decoder/dict.h index 72e82e6d..bc3a904a 100644 --- a/decoder/dict.h +++ b/decoder/dict.h @@ -13,9 +13,12 @@  class Dict {   typedef std::tr1::unordered_map<std::string, WordID, boost::hash<std::string> > Map; +   public:    Dict() : b0_("<bad0>") { words_.reserve(1000); } +    inline int max() const { return words_.size(); } +    inline WordID Convert(const std::string& word, bool frozen = false) {      Map::iterator i = d_.find(word);      if (i == d_.end()) { @@ -28,12 +31,26 @@ class Dict {        return i->second;      }    } + +  inline WordID Convert(const std::vector<std::string>& words, bool frozen = false) { +    std::string word= ""; +    for (std::vector<std::string>::const_iterator it=words.begin(); +         it != words.end(); ++it) { +      if (it != words.begin()) word += "__"; +      word += *it; +    } + +    return Convert(word, frozen); +  } +    inline const std::string& Convert(const WordID& id) const {      if (id == 0) return b0_;      assert(id <= words_.size());      return words_[id-1];    } +    void clear() { words_.clear(); d_.clear(); } +   private:    const std::string b0_;    std::vector<std::string> words_; | 
