00001 #include "lm/ngram_query.hh"
00002
00003 int main(int argc, char *argv[]) {
00004 if (!(argc == 2 || (argc == 3 && !strcmp(argv[2], "null")))) {
00005 std::cerr << "Usage: " << argv[0] << " lm_file [null]" << std::endl;
00006 std::cerr << "Input is wrapped in <s> and </s> unless null is passed." << std::endl;
00007 return 1;
00008 }
00009 try {
00010 bool sentence_context = (argc == 2);
00011 using namespace lm::ngram;
00012 ModelType model_type;
00013 if (RecognizeBinary(argv[1], model_type)) {
00014 switch(model_type) {
00015 case PROBING:
00016 Query<lm::ngram::ProbingModel>(argv[1], sentence_context, std::cin, std::cout);
00017 break;
00018 case REST_PROBING:
00019 Query<lm::ngram::RestProbingModel>(argv[1], sentence_context, std::cin, std::cout);
00020 break;
00021 case TRIE:
00022 Query<TrieModel>(argv[1], sentence_context, std::cin, std::cout);
00023 break;
00024 case QUANT_TRIE:
00025 Query<QuantTrieModel>(argv[1], sentence_context, std::cin, std::cout);
00026 break;
00027 case ARRAY_TRIE:
00028 Query<ArrayTrieModel>(argv[1], sentence_context, std::cin, std::cout);
00029 break;
00030 case QUANT_ARRAY_TRIE:
00031 Query<QuantArrayTrieModel>(argv[1], sentence_context, std::cin, std::cout);
00032 break;
00033 default:
00034 std::cerr << "Unrecognized kenlm model type " << model_type << std::endl;
00035 abort();
00036 }
00037 } else {
00038 Query<ProbingModel>(argv[1], sentence_context, std::cin, std::cout);
00039 }
00040 std::cerr << "Total time including destruction:\n";
00041 util::PrintUsage(std::cerr);
00042 } catch (const std::exception &e) {
00043 std::cerr << e.what() << std::endl;
00044 return 1;
00045 }
00046 return 0;
00047 }