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 }