From 678622763452bbef3704ec18f79abffead6e38b1 Mon Sep 17 00:00:00 2001 From: Benoit Favre <benoit.favre@lif.univ-mrs.fr> Date: Thu, 2 Feb 2017 16:13:43 +0100 Subject: [PATCH] add compatibility with macaon configuration commandline options --- maca_crf_tagger/src/crf_barebones_decoder.cc | 28 ++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/maca_crf_tagger/src/crf_barebones_decoder.cc b/maca_crf_tagger/src/crf_barebones_decoder.cc index 8a3aeb4..fd2ab3a 100644 --- a/maca_crf_tagger/src/crf_barebones_decoder.cc +++ b/maca_crf_tagger/src/crf_barebones_decoder.cc @@ -1,3 +1,4 @@ +#include <cstdlib> #include <vector> #include "crf_decoder.hh" #include "crf_binlexicon.hh" @@ -42,15 +43,20 @@ void tag_sentence(macaon::Decoder& decoder, macaon::BinaryLexicon* lexicon, cons } void usage(const char* argv0) { - std::cerr << "usage: " << argv0 << " [--conll07|--column <num>] <model> [lexicon]\n"; + std::cerr << "usage: " << argv0 << " [--conll07|--column <num>] [<model> [lexicon]|-L <lang> [-D <model-dir>] [--nolexicon]]\n"; exit(1); } int main(int argc, char** argv) { bool isConll07 = false; // warning: no verification of conll07 format int word_offset = 0; + std::string modelDir = ""; + std::string modelLang = ""; + char* macaon_dir = getenv("MACAON_DIR"); + if(macaon_dir != NULL) modelDir = macaon_dir; std::string modelName = ""; std::string lexiconName = ""; + bool noLexicon = false; for(int i = 1; i < argc; i++) { std::string arg = argv[i]; @@ -63,6 +69,16 @@ int main(int argc, char** argv) { arg = argv[i + 1]; word_offset = strtol(arg.c_str(), NULL, 10) - 1; i++; + } else if(arg == "-L") { + arg = argv[i + 1]; + modelLang = arg; + i++; + } else if(arg == "-D") { + arg = argv[i + 1]; + modelDir = arg; + i++; + } else if(arg == "--nolexicon") { + noLexicon = true; } else if(modelName == "") { modelName = arg; } else if(lexiconName =="") { @@ -71,11 +87,19 @@ int main(int argc, char** argv) { usage(argv[0]); } } + if(modelDir != "" && modelLang != "") { + modelName = modelDir + "/" + modelLang + "/bin/crf_tagger_model.bin"; + if(!noLexicon) lexiconName = modelDir + "/" + modelLang + "/bin/crf_tagger_wordtag_lexicon.bin"; + } if(modelName == "" || word_offset < 0) usage(argv[0]); macaon::Decoder decoder(modelName); + if(!decoder.IsLoaded()) return 1; macaon::BinaryLexicon *lexicon = NULL; - if(lexiconName != "") lexicon = new macaon::BinaryLexicon(lexiconName, decoder.getTagset()); + if(lexiconName != "") { + lexicon = new macaon::BinaryLexicon(lexiconName, decoder.getTagset()); + if(!lexicon->IsLoaded()) return 1; + } std::string line; std::vector<std::vector<std::string> > lines; -- GitLab