template <class Model> void Query(const char *name) { | |
Model model(name); | |
std::string line; | |
lm::ngram::ChartState ignored; | |
while (getline(std::cin, line)) { | |
lm::ngram::RuleScore<Model> scorer(model, ignored); | |
for (util::TokenIter<util::SingleCharacter, true> i(line, ' '); i; ++i) { | |
scorer.Terminal(model.GetVocabulary().Index(*i)); | |
} | |
std::cout << scorer.Finish() << '\n'; | |
} | |
} | |
int main(int argc, char *argv[]) { | |
if (argc != 2) { | |
std::cerr << "Expected model file name." << std::endl; | |
return 1; | |
} | |
const char *name = argv[1]; | |
lm::ngram::ModelType model_type = lm::ngram::PROBING; | |
lm::ngram::RecognizeBinary(name, model_type); | |
switch (model_type) { | |
case lm::ngram::PROBING: | |
Query<lm::ngram::ProbingModel>(name); | |
break; | |
case lm::ngram::REST_PROBING: | |
Query<lm::ngram::RestProbingModel>(name); | |
break; | |
default: | |
std::cerr << "Model type not supported yet." << std::endl; | |
} | |
} | |