|
#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; |
|
} |
|
|
|
|
|
|