| #include <iostream> |
| #include <string> |
|
|
| #include "moses/Phrase.h" |
| #include "moses/FactorCollection.h" |
| #include "moses/Timer.h" |
| #include "moses/InputFileStream.h" |
| #include "moses/FF/LexicalReordering/LexicalReorderingTable.h" |
| #include "moses/parameters/OOVHandlingOptions.h" |
|
|
| using namespace Moses; |
|
|
| Timer timer; |
|
|
| void printHelp() |
| { |
| std::cerr << "Usage:\n" |
| "options: \n" |
| "\t-table file -- input table file name\n" |
| "\t-f string -- f query phrase\n" |
| "\t-e string -- e query phrase\n" |
| "\t-c string -- context query phrase\n" |
| "\n"; |
| } |
|
|
| std::ostream& operator<<(std::ostream& o, Scores s) |
| { |
| for(size_t i = 0; i < s.size(); ++i) { |
| o << s[i] << " "; |
| } |
| |
| return o; |
| }; |
|
|
| int main(int argc, char** argv) |
| { |
| std::cerr << "queryLexicalTable v0.2 by Konrad Rawlik\n"; |
| std::string inFilePath; |
| std::string outFilePath("out"); |
| bool cache = false; |
| std::string query_e, query_f, query_c; |
| bool use_context = false; |
| bool use_e = false; |
| if(1 >= argc) { |
| printHelp(); |
| return 1; |
| } |
| for(int i = 1; i < argc; ++i) { |
| std::string arg(argv[i]); |
| if("-table" == arg && i+1 < argc) { |
| |
| ++i; |
| inFilePath = argv[i]; |
| } else if("-f" == arg && i+1 < argc) { |
| ++i; |
| |
| query_f = argv[i]; |
| } else if("-e" == arg && i+1 < argc) { |
| ++i; |
| query_e = argv[i]; |
| use_e = true; |
| } else if("-c" == arg) { |
| if(i+1 < argc && '-' != argv[i+1][0]) { |
| ++i; |
| query_c = argv[i]; |
| use_context = true; |
| } else { |
| use_context = false; |
| } |
| } else if("-cache" == arg) { |
| ++i; |
| cache = true; |
| } else { |
| |
| printHelp(); |
| return 1; |
| } |
| } |
|
|
| FactorList f_mask; |
| FactorList e_mask; |
| FactorList c_mask; |
| f_mask.push_back(0); |
| if(use_e) { |
| e_mask.push_back(0); |
| } |
| if(use_context) { |
| c_mask.push_back(0); |
| } |
| Phrase e( 0),f(0),c(0); |
| |
| |
| |
| |
| |
| |
| e.CreateFromString(Output, e_mask, query_e, NULL); |
| f.CreateFromString(Input, f_mask, query_f, NULL); |
| c.CreateFromString(Input, c_mask, query_c, NULL); |
| LexicalReorderingTable* table; |
| if(FileExists(inFilePath+".binlexr.idx")) { |
| std::cerr << "Loading binary table...\n"; |
| table = new LexicalReorderingTableTree(inFilePath, f_mask, e_mask, c_mask); |
| } else { |
| std::cerr << "Loading ordinary table...\n"; |
| table = new LexicalReorderingTableMemory(inFilePath, f_mask, e_mask, c_mask); |
| } |
| |
| if(cache) { |
| std::cerr << "Caching for f\n"; |
| table->InitializeForInputPhrase(f); |
| } |
|
|
| std::cerr << "Querying: " |
| << "f='" << f.GetStringRep(f_mask) <<"' " |
| << "e='" << e.GetStringRep(e_mask) << "' " |
| << "c='" << c.GetStringRep(c_mask) << "'\n"; |
| std::cerr << table->GetScore(f,e,c) << "\n"; |
| |
| delete table; |
| return 0; |
| } |
|
|
|
|
|
|