00001
00002
00003 #include <boost/program_options.hpp>
00004 #include <iomanip>
00005
00006 #include "tpt_typedefs.h"
00007 #include "ug_mm_ttrack.h"
00008 #include "tpt_tokenindex.h"
00009 #include "ug_deptree.h"
00010 #include "ug_corpus_token.h"
00011 #include "tpt_pickler.h"
00012
00013 using namespace std;
00014 using namespace sapt;
00015 namespace po = boost::program_options;
00016
00017 string mamfile;
00018 vector<string> range;
00019
00020 typedef L2R_Token<Conll_Sform> Token;
00021
00022 mmTtrack<char> MAM;
00023 bool with_sids;
00024
00025 void
00026 interpret_args(int ac, char* av[])
00027 {
00028 po::variables_map vm;
00029 po::options_description o("Options");
00030 o.add_options()
00031 ("help,h", "print this message")
00032 ("numbers,n", po::bool_switch(&with_sids), "print sentence ids as first token")
00033 ;
00034
00035 po::options_description h("Hidden Options");
00036 h.add_options()
00037 ("mamfile", po::value<string>(&mamfile), "mamfile")
00038 ("range", po::value<vector<string> >(&range), "range")
00039 ;
00040 po::positional_options_description a;
00041 a.add("mamfile",1);
00042 a.add("range",-1);
00043
00044 po::store(po::command_line_parser(ac,av)
00045 .options(h.add(o))
00046 .positional(a)
00047 .run(),vm);
00048 po::notify(vm);
00049 if (vm.count("help") || mamfile.empty())
00050 {
00051 cout << "usage:\n\t"
00052 << av[0] << " track name [<range>]\n"
00053 << endl;
00054 cout << o << endl;
00055 exit(0);
00056 }
00057 }
00058
00059 void
00060 printRangeMAM(size_t start, size_t stop)
00061 {
00062 for (;start < stop; start++)
00063 {
00064
00065 char const* p = MAM.sntStart(start);
00066 char const* q = MAM.sntEnd(start);
00067 if (with_sids) cout << start << " ";
00068 ushort s,t;
00069 while (p < q)
00070 {
00071 p = tpt::binread(p,s);
00072 p = tpt::binread(p,t);
00073 cout << s << "-" << t << " ";
00074 }
00075 cout << endl;
00076 }
00077 }
00078
00079 int
00080 main(int argc, char*argv[])
00081 {
00082 interpret_args(argc,argv);
00083 MAM.open(mamfile);
00084 if (!range.size()) printRangeMAM(0, MAM.size());
00085 else
00086 {
00087 for (size_t i = 0; i < range.size(); i++)
00088 {
00089 istringstream buf(range[i]);
00090 size_t first,last; uchar c;
00091 buf>>first;
00092 if (buf.peek() == '-') buf>>c>>last;
00093 else last = first;
00094 if (last < MAM.size())
00095 printRangeMAM(first,last+1);
00096 }
00097 }
00098 }