summaryrefslogtreecommitdiff
path: root/decoder
diff options
context:
space:
mode:
authorphilblunsom@gmail.com <philblunsom@gmail.com@ec762483-ff6d-05da-a07a-a48fb63a330f>2010-06-29 04:35:29 +0000
committerphilblunsom@gmail.com <philblunsom@gmail.com@ec762483-ff6d-05da-a07a-a48fb63a330f>2010-06-29 04:35:29 +0000
commit9705782c98265c05bc87a10b1fb69bd35781c754 (patch)
treea9f9bc8a69007e8804c3bc855af8911d5c187e41 /decoder
parent3418c41232756adb9bf29036980e55a3ce0140e0 (diff)
Update utility functions to work with pyp-topics.
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@49 ec762483-ff6d-05da-a07a-a48fb63a330f
Diffstat (limited to 'decoder')
-rw-r--r--decoder/dict.h17
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_;