00001 #include <iostream> 00002 #include "hash.hh" 00003 00004 using namespace std; 00005 00006 namespace Moses 00007 { 00008 00009 uint64_t getHash(StringPiece text) 00010 { 00011 std::size_t len = text.size(); 00012 uint64_t key = util::MurmurHashNative(text.data(), len); 00013 return key; 00014 } 00015 00016 std::vector<uint64_t> getVocabIDs(const StringPiece &textin) 00017 { 00018 //Tokenize 00019 std::vector<uint64_t> output; 00020 00021 util::TokenIter<util::SingleCharacter> itWord(textin, util::SingleCharacter(' ')); 00022 00023 while (itWord) { 00024 StringPiece word = *itWord; 00025 uint64_t id = 0; 00026 00027 util::TokenIter<util::SingleCharacter> itFactor(word, util::SingleCharacter('|')); 00028 while (itFactor) { 00029 StringPiece factor = *itFactor; 00030 //cerr << "factor=" << factor << endl; 00031 00032 id += getHash(factor); 00033 itFactor++; 00034 } 00035 00036 output.push_back(id); 00037 itWord++; 00038 } 00039 00040 return output; 00041 } 00042 00043 } 00044