int main(int argc, char **argv) { int tableLimit = 20; std::string ttable = ""; bool useAlignments = false; for(int i = 1; i < argc; i++) { if(!strcmp(argv[i], "-tlimit")) { if(i + 1 == argc) usage(); tableLimit = atoi(argv[++i]); } else if(!strcmp(argv[i], "-t")) { if(i + 1 == argc) usage(); ttable = argv[++i]; } else usage(); } if(ttable == "") usage(); OnDiskWrapper onDiskWrapper; bool retDb = onDiskWrapper.BeginLoad(ttable); CHECK(retDb); OnDiskQuery onDiskQuery(onDiskWrapper); cerr << "Ready..." << endl; std::string line; while(getline(std::cin, line)) { std::vector<std::string> tokens; tokens = Moses::Tokenize(line, " "); cerr << "line: " << line << endl; const PhraseNode* node = onDiskQuery.Query(tokens); if (node) { // source phrase points to a bunch of rules const TargetPhraseCollection *coll = node->GetTargetPhraseCollection(tableLimit, onDiskWrapper); string str = coll->GetDebugStr(); cout << "Found " << coll->GetSize() << endl; for (size_t ind = 0; ind < coll->GetSize(); ++ind) { const TargetPhrase &targetPhrase = coll->GetTargetPhrase(ind); cerr << " "; targetPhrase.DebugPrint(cerr, onDiskWrapper.GetVocab()); cerr << endl; } } else { cout << "Not found" << endl; } std::cout << '\n'; std::cout.flush(); } cerr << "Finished." << endl; }
int main(int argc, char **argv) { int tableLimit = 20; std::string ttable = ""; bool useAlignments = false; for(int i = 1; i < argc; i++) { if(!strcmp(argv[i], "-tlimit")) { if(i + 1 == argc) usage(); tableLimit = atoi(argv[++i]); } else if(!strcmp(argv[i], "-t")) { if(i + 1 == argc) usage(); ttable = argv[++i]; } else usage(); } if(ttable == "") usage(); OnDiskWrapper onDiskWrapper; bool retDb = onDiskWrapper.BeginLoad(ttable); CHECK(retDb); cerr << "Ready..." << endl; std::string line; while(getline(std::cin, line)) { std::vector<std::string> tokens; tokens = Moses::Tokenize(line, " "); cerr << "line: " << line << endl; // create source phrase SourcePhrase sourcePhrase; for (size_t pos = 0; pos < tokens.size(); ++pos) { const string &tok = tokens[pos]; if (pos == tokens.size() - 1) { // last position. LHS non-term Tokenize(sourcePhrase, tok, false, true, onDiskWrapper); } else { Tokenize(sourcePhrase, tok, true, true, onDiskWrapper); } } const PhraseNode *node = &onDiskWrapper.GetRootSourceNode(); cerr << "node=" << node << endl; assert(node); for (size_t pos = 0; pos < sourcePhrase.GetSize(); ++pos) { const Word &word = sourcePhrase.GetWord(pos); cerr << word << " "; node = node->GetChild(word, onDiskWrapper); cerr << "node=" << node << endl; if (node == NULL) { break; } } if (node) { // source phrase points to a bunch of rules const TargetPhraseCollection *coll = node->GetTargetPhraseCollection(tableLimit, onDiskWrapper); string str = coll->GetDebugStr(); cout << "Found " << coll->GetSize() << endl; for (size_t ind = 0; ind < coll->GetSize(); ++ind) { const TargetPhrase &targetPhrase = coll->GetTargetPhrase(ind); cerr << " "; targetPhrase.DebugPrint(cerr, onDiskWrapper.GetVocab()); cerr << endl; } } else { cout << "Not found" << endl; } std::cout << '\n'; std::cout.flush(); } cerr << "Finished." << endl; }