diff options
| author | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-07-09 16:04:07 +0000 | 
|---|---|---|
| committer | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-07-09 16:04:07 +0000 | 
| commit | 4b17ba155568a394373f6baba40e8b5d5281ccdb (patch) | |
| tree | 97437f1abd88d119b255820fcdd41aae6fca832e | |
| parent | 4a139f0dae3a97c0acdac090bb9d36119413cf3e (diff) | |
cdec --compgen bash completions generation
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@199 ec762483-ff6d-05da-a07a-a48fb63a330f
| -rw-r--r-- | decoder/cdec.cc | 37 | 
1 files changed, 33 insertions, 4 deletions
diff --git a/decoder/cdec.cc b/decoder/cdec.cc index 79d51939..bcba1409 100644 --- a/decoder/cdec.cc +++ b/decoder/cdec.cc @@ -76,6 +76,19 @@ shared_ptr<FeatureFunction> make_ff(string const& ffp,bool verbose_feature_funct    return pf;  } +// print just the --long_opt names suitable for bash compgen +void print_options(std::ostream &out,po::options_description const& opts) { +  typedef std::vector< shared_ptr<po::option_description> > Ds; +  Ds const& ds=opts.options(); +  out << '"'; +  for (unsigned i=0;i<ds.size();++i) { +    if (i) out<<' '; +    out<<"--"<<ds[i]->long_name(); +  } +  out << '"'; +} + +  void InitCommandLine(int argc, char** argv, po::variables_map* confp) {    po::variables_map &conf=*confp;    po::options_description opts("Configuration options"); @@ -135,6 +148,7 @@ void InitCommandLine(int argc, char** argv, po::variables_map* confp) {          ("config,c", po::value<string>(), "Configuration file")          ("help,h", "Print this help message and exit")      ("usage,u", po::value<string>(), "Describe a feature function type") +    ("compgen", "Print just option names suitable for bash command line completion builtin 'compgen'")      ;    po::options_description dconfig_options, dcmdline_options; @@ -142,6 +156,12 @@ void InitCommandLine(int argc, char** argv, po::variables_map* confp) {    dcmdline_options.add(opts).add(clo);    po::store(parse_command_line(argc, argv, dcmdline_options), conf); +  if (conf.count("compgen")) { +    print_options(cout,dcmdline_options); +    cout << endl; +    exit(0); +  } +  ShowBanner();    if (conf.count("config")) {      const string cfg = str("config",conf);      cerr << "Configuration file: " << cfg << endl; @@ -151,12 +171,13 @@ void InitCommandLine(int argc, char** argv, po::variables_map* confp) {    po::notify(conf);    if (conf.count("list_feature_functions")) { -    cerr << "Available feature functions (specify with -F):\n"; +    cerr << "Available feature functions (specify with -F; describe with -u FeatureName):\n";      global_ff_registry->DisplayList();      cerr << endl;      exit(1);    } +    if (conf.count("usage")) {      cout<<global_ff_registry->usage(str("usage",conf),true,true)<<endl;      exit(0); @@ -346,7 +367,6 @@ void show_models(po::variables_map const& conf,ModelSet &ms,char const* header)  int main(int argc, char** argv) {    global_ff_registry.reset(new FFRegistry);    register_feature_functions(); -  ShowBanner();    po::variables_map conf;    InitCommandLine(argc, argv, &conf);    const bool write_gradient = conf.count("cll_gradient"); @@ -390,8 +410,12 @@ int main(int argc, char** argv) {      }  //    cerr << "+LM weights: " << FeatureVector(feature_weights)<<endl;    } -  if (!conf.count("no_freeze_feature_set")) { -    cerr << "Freezing feature set (use --no_freeze_feature_set to change)." << endl; +  bool warn0=conf.count("warn_0_weight"); +  bool freeze=!conf.count("no_freeze_feature_set"); +  bool early_freeze=freeze && !warn0; +  bool late_freeze=freeze && warn0; +  if (early_freeze) { +    cerr << "Freezing feature set (use --no_freeze_feature_set or --warn_0_weight to prevent)." << endl;      FD::Freeze(); // this means we can't see the feature names of not-weighted features    } @@ -439,6 +463,11 @@ int main(int argc, char** argv) {      }    } +  if (late_freeze) { +    cerr << "Late freezing feature set (use --no_freeze_feature_set to prevent)." << endl; +    FD::Freeze(); // this means we can't see the feature names of not-weighted features +  } +    if (has_prelm_models)          cerr << "prelm rescoring with "<<prelm_ffs.size()<<" 0-state feature functions.  +LM pass will use "<<late_ffs.size()<<" features (not counting rule features)."<<endl;  | 
