// See www.openfst.org for extensive documentation on this weighted // finite-state transducer library. // // Convenience file for including all of the FAR operations, or registering // them for new arc types. #ifndef FST_EXTENSIONS_FAR_FARSCRIPT_H_ #define FST_EXTENSIONS_FAR_FARSCRIPT_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace fst { namespace script { // Note: it is safe to pass these strings as references because this struct is // only used to pass them deeper in the call graph. Be sure you understand why // this is so before using this struct for anything else! struct FarCompileStringsArgs { const std::vector &in_fnames; const string &out_fname; const string &fst_type; const FarType &far_type; const int32 generate_keys; const FarEntryType fet; const FarTokenType tt; const string &symbols_fname; const string &unknown_symbol; const bool keep_symbols; const bool initial_symbols; const bool allow_negative_labels; const string &key_prefix; const string &key_suffix; FarCompileStringsArgs(const std::vector &in_fnames, const string &out_fname, const string &fst_type, const FarType &far_type, int32 generate_keys, FarEntryType fet, FarTokenType tt, const string &symbols_fname, const string &unknown_symbol, bool keep_symbols, bool initial_symbols, bool allow_negative_labels, const string &key_prefix, const string &key_suffix) : in_fnames(in_fnames), out_fname(out_fname), fst_type(fst_type), far_type(far_type), generate_keys(generate_keys), fet(fet), tt(tt), symbols_fname(symbols_fname), unknown_symbol(unknown_symbol), keep_symbols(keep_symbols), initial_symbols(initial_symbols), allow_negative_labels(allow_negative_labels), key_prefix(key_prefix), key_suffix(key_suffix) {} }; template void FarCompileStrings(FarCompileStringsArgs *args) { FarCompileStrings( args->in_fnames, args->out_fname, args->fst_type, args->far_type, args->generate_keys, args->fet, args->tt, args->symbols_fname, args->unknown_symbol, args->keep_symbols, args->initial_symbols, args->allow_negative_labels, args->key_prefix, args->key_suffix); } void FarCompileStrings(const std::vector &in_fnames, const string &out_fname, const string &arc_type, const string &fst_type, const FarType &far_type, int32 generate_keys, FarEntryType fet, FarTokenType tt, const string &symbols_fname, const string &unknown_symbol, bool keep_symbols, bool initial_symbols, bool allow_negative_labels, const string &key_prefix, const string &key_suffix); // Note: it is safe to pass these strings as references because this struct is // only used to pass them deeper in the call graph. Be sure you understand why // this is so before using this struct for anything else! struct FarCreateArgs { const std::vector &in_fnames; const string &out_fname; const int32 generate_keys; const FarType &far_type; const string &key_prefix; const string &key_suffix; FarCreateArgs(const std::vector &in_fnames, const string &out_fname, const int32 generate_keys, const FarType &far_type, const string &key_prefix, const string &key_suffix) : in_fnames(in_fnames), out_fname(out_fname), generate_keys(generate_keys), far_type(far_type), key_prefix(key_prefix), key_suffix(key_suffix) {} }; template void FarCreate(FarCreateArgs *args) { FarCreate(args->in_fnames, args->out_fname, args->generate_keys, args->far_type, args->key_prefix, args->key_suffix); } void FarCreate(const std::vector &in_fnames, const string &out_fname, const string &arc_type, const int32 generate_keys, const FarType &far_type, const string &key_prefix, const string &key_suffix); using FarEqualInnerArgs = std::tuple; using FarEqualArgs = WithReturnValue; template void FarEqual(FarEqualArgs *args) { args->retval = fst::FarEqual( std::get<0>(args->args), std::get<1>(args->args), std::get<2>(args->args), std::get<3>(args->args), std::get<4>(args->args)); } bool FarEqual(const string &filename1, const string &filename2, const string &arc_type, float delta = kDelta, const string &begin_key = string(), const string &end_key = string()); using FarExtractArgs = std::tuple &, int32, const string &, const string &, const string &, const string &, const string &>; template void FarExtract(FarExtractArgs *args) { fst::FarExtract(std::get<0>(*args), std::get<1>(*args), std::get<2>(*args), std::get<3>(*args), std::get<4>(*args), std::get<5>(*args), std::get<6>(*args)); } void FarExtract(const std::vector &ifilenames, const string &arc_type, int32 generate_filenames, const string &keys, const string &key_separator, const string &range_delimiter, const string &filename_prefix, const string &filename_suffix); using FarInfoArgs = std::tuple &, const string &, const string &, const bool>; template void FarInfo(FarInfoArgs *args) { fst::FarInfo(std::get<0>(*args), std::get<1>(*args), std::get<2>(*args), std::get<3>(*args)); } void FarInfo(const std::vector &filenames, const string &arc_type, const string &begin_key, const string &end_key, const bool list_fsts); using GetFarInfoArgs = std::tuple &, const string &, const string &, const bool, FarInfoData *>; template void GetFarInfo(GetFarInfoArgs *args) { fst::GetFarInfo(std::get<0>(*args), std::get<1>(*args), std::get<2>(*args), std::get<3>(*args), std::get<4>(*args)); } void GetFarInfo(const std::vector &filenames, const string &arc_type, const string &begin_key, const string &end_key, const bool list_fsts, FarInfoData *); using FarIsomorphicInnerArgs = std::tuple; using FarIsomorphicArgs = WithReturnValue; template void FarIsomorphic(FarIsomorphicArgs *args) { args->retval = fst::FarIsomorphic( std::get<0>(args->args), std::get<1>(args->args), std::get<2>(args->args), std::get<3>(args->args), std::get<4>(args->args)); } bool FarIsomorphic(const string &filename1, const string &filename2, const string &arc_type, float delta = kDelta, const string &begin_key = string(), const string &end_key = string()); struct FarPrintStringsArgs { const std::vector &ifilenames; const FarEntryType entry_type; const FarTokenType token_type; const string &begin_key; const string &end_key; const bool print_key; const bool print_weight; const string &symbols_fname; const bool initial_symbols; const int32 generate_filenames; const string &filename_prefix; const string &filename_suffix; FarPrintStringsArgs(const std::vector &ifilenames, const FarEntryType entry_type, const FarTokenType token_type, const string &begin_key, const string &end_key, const bool print_key, const bool print_weight, const string &symbols_fname, const bool initial_symbols, const int32 generate_filenames, const string &filename_prefix, const string &filename_suffix) : ifilenames(ifilenames), entry_type(entry_type), token_type(token_type), begin_key(begin_key), end_key(end_key), print_key(print_key), print_weight(print_weight), symbols_fname(symbols_fname), initial_symbols(initial_symbols), generate_filenames(generate_filenames), filename_prefix(filename_prefix), filename_suffix(filename_suffix) {} }; template void FarPrintStrings(FarPrintStringsArgs *args) { fst::FarPrintStrings( args->ifilenames, args->entry_type, args->token_type, args->begin_key, args->end_key, args->print_key, args->print_weight, args->symbols_fname, args->initial_symbols, args->generate_filenames, args->filename_prefix, args->filename_suffix); } void FarPrintStrings(const std::vector &ifilenames, const string &arc_type, const FarEntryType entry_type, const FarTokenType token_type, const string &begin_key, const string &end_key, const bool print_key, const bool print_weight, const string &symbols_fname, const bool initial_symbols, const int32 generate_filenames, const string &filename_prefix, const string &filename_suffix); } // namespace script } // namespace fst #define REGISTER_FST_FAR_OPERATIONS(ArcType) \ REGISTER_FST_OPERATION(FarCompileStrings, ArcType, FarCompileStringsArgs); \ REGISTER_FST_OPERATION(FarCreate, ArcType, FarCreateArgs); \ REGISTER_FST_OPERATION(FarEqual, ArcType, FarEqualArgs); \ REGISTER_FST_OPERATION(FarExtract, ArcType, FarExtractArgs); \ REGISTER_FST_OPERATION(FarInfo, ArcType, FarInfoArgs); \ REGISTER_FST_OPERATION(FarIsomorphic, ArcType, FarIsomorphicArgs); \ REGISTER_FST_OPERATION(FarPrintStrings, ArcType, FarPrintStringsArgs); \ REGISTER_FST_OPERATION(GetFarInfo, ArcType, GetFarInfoArgs) #endif // FST_EXTENSIONS_FAR_FARSCRIPT_H_