00001 #include <boost/foreach.hpp>
00002 #include "vocabid.hh"
00003 #include "StoreVocab.h"
00004 #include "moses/Util.h"
00005
00006 namespace Moses
00007 {
00008
00009 void add_to_map(StoreVocab<uint64_t> &sourceVocab,
00010 const StringPiece &textin)
00011 {
00012
00013 util::TokenIter<util::SingleCharacter> itWord(textin, util::SingleCharacter(' '));
00014
00015 while (itWord) {
00016 StringPiece word = *itWord;
00017
00018 util::TokenIter<util::SingleCharacter> itFactor(word, util::SingleCharacter('|'));
00019 while (itFactor) {
00020 StringPiece factor = *itFactor;
00021
00022 sourceVocab.Insert(getHash(factor), factor.as_string());
00023 itFactor++;
00024 }
00025 itWord++;
00026 }
00027 }
00028
00029 void serialize_map(const std::map<uint64_t, std::string> &karta,
00030 const std::string &filename)
00031 {
00032 std::ofstream os(filename.c_str());
00033
00034 std::map<uint64_t, std::string>::const_iterator iter;
00035 for (iter = karta.begin(); iter != karta.end(); ++iter) {
00036 os << iter->first << '\t' << iter->second << std::endl;
00037 }
00038
00039 os.close();
00040 }
00041
00042 void read_map(std::map<uint64_t, std::string> &karta, const char* filename)
00043 {
00044 std::ifstream is(filename);
00045
00046 std::string line;
00047 while (getline(is, line)) {
00048 std::vector<std::string> toks = Tokenize(line, "\t");
00049 assert(toks.size() == 2);
00050 uint64_t ind = Scan<uint64_t>(toks[1]);
00051 karta[ind] = toks[0];
00052 }
00053
00054
00055 is.close();
00056 }
00057
00058 }
00059