43 std::string usage =
"Reverse an MPDT.\n\n Usage: ";
45 usage +=
" in.pdt [out.fst]\n";
47 SET_FLAGS(usage.c_str(), &argc, &argv,
true);
53 const std::string in_name =
54 (argc > 1 && (strcmp(argv[1],
"-") != 0)) ? argv[1] :
"";
55 const std::string out_name =
56 (argc > 2 && (strcmp(argv[2],
"-") != 0)) ? argv[2] :
"";
58 std::unique_ptr<FstClass> ifst(FstClass::Read(in_name));
61 if (FST_FLAGS_mpdt_parentheses.empty()) {
62 LOG(ERROR) << argv[0] <<
": No MPDT parenthesis label pairs provided";
66 if (FST_FLAGS_mpdt_new_parentheses.empty()) {
67 LOG(ERROR) << argv[0] <<
": No MPDT output parenthesis label file provided";
71 std::vector<std::pair<int64_t, int64_t>> parens;
72 std::vector<int64_t> assignments;
78 VectorFstClass ofst(ifst->ArcType());
80 s::Reverse(*ifst, parens, &assignments, &ofst);
82 if (!ofst.Write(out_name))
return 1;
void ShowUsage(bool long_usage=true)
void Reverse(const FstClass &ifst, const std::vector< std::pair< int64_t, int64_t >> &parens, std::vector< int64_t > *assignments, MutableFstClass *ofst)
#define SET_FLAGS(usage, argc, argv, rmflags)
bool ReadLabelTriples(const std::string &source, std::vector< std::pair< Label, Label >> *pairs, std::vector< Label > *assignments)
bool WriteLabelTriples(const std::string &source, const std::vector< std::pair< Label, Label >> &pairs, const std::vector< Label > &assignments)
DECLARE_string(mpdt_parentheses)
int mpdtreverse_main(int argc, char **argv)