Skip to content

Commit

Permalink
tool to reconstruct text weights from a hash function, key file, and …
Browse files Browse the repository at this point in the history
…(binary) weights file
  • Loading branch information
Chris Dyer committed Sep 13, 2011
1 parent 722c38f commit a882bb5
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
5 changes: 5 additions & 0 deletions utils/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@

bin_PROGRAMS = reconstruct_weights

noinst_PROGRAMS = ts phmt
TESTS = ts phmt

Expand All @@ -11,6 +14,8 @@ noinst_PROGRAMS += \
TESTS += small_vector_test logval_test weights_test dict_test
endif

reconstruct_weights_SOURCES = reconstruct_weights.cc

noinst_LIBRARIES = libutils.a

libutils_a_SOURCES = \
Expand Down
68 changes: 68 additions & 0 deletions utils/reconstruct_weights.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#include <iostream>
#include <vector>
#include <cassert>

#include <boost/program_options.hpp>
#include <boost/program_options/variables_map.hpp>

#include "filelib.h"
#include "fdict.h"
#include "weights.h"

using namespace std;
namespace po = boost::program_options;

bool InitCommandLine(int argc, char** argv, po::variables_map* conf) {
po::options_description opts("Configuration options");
opts.add_options()
("weights,w",po::value<string>(),"Input feature weights file")
("keys,k",po::value<string>(),"Keys file (list of features with dummy value at start)")
("cmph_perfect_hash_file,h",po::value<string>(),"cmph perfect hash function file");
po::options_description clo("Command line options");
clo.add_options()
("config", po::value<string>(), "Configuration file")
("help,?", "Print this help message and exit");
po::options_description dconfig_options, dcmdline_options;
dconfig_options.add(opts);
dcmdline_options.add(opts).add(clo);

po::store(parse_command_line(argc, argv, dcmdline_options), *conf);
if (conf->count("config")) {
ifstream config((*conf)["config"].as<string>().c_str());
po::store(po::parse_config_file(config, dconfig_options), *conf);
}
po::notify(*conf);

if (conf->count("help") || !conf->count("cmph_perfect_hash_file") || !conf->count("weights") || !conf->count("keys")) {
cerr << "Generate a text format weights file. Options -w -k and -h are required.\n";
cerr << dcmdline_options << endl;
return false;
}
return true;
}

int main(int argc, char** argv) {
po::variables_map conf;
if (!InitCommandLine(argc, argv, &conf))
return false;

FD::EnableHash(conf["cmph_perfect_hash_file"].as<string>());

// load weights
vector<weight_t> weights;
Weights::InitFromFile(conf["weights"].as<string>(), &weights);

ReadFile rf(conf["keys"].as<string>());
istream& in = *rf.stream();
string key;
size_t lc = 0;
while(getline(in, key)) {
++lc;
if (lc == 1) continue;
assert(lc <= weights.size());
cout << key << " " << weights[lc - 1] << endl;
}

return 0;
}

0 comments on commit a882bb5

Please sign in to comment.