15b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 25b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// Licensed under the Apache License, Version 2.0 (the "License"); 35b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// you may not use this file except in compliance with the License. 45b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// You may obtain a copy of the License at 55b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// 65b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// http://www.apache.org/licenses/LICENSE-2.0 75b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// 85b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// Unless required by applicable law or agreed to in writing, software 95b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// distributed under the License is distributed on an "AS IS" BASIS, 105b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 115b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// See the License for the specific language governing permissions and 125b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// limitations under the License. 135b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// 145b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// Copyright 2005-2010 Google, Inc. 155b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin// Author: riley@google.com (Jake Ratkiewicz) 165b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 175b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#ifndef FST_SCRIPT_DISAMBIGUATE_H_ 185b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#define FST_SCRIPT_DISAMBIGUATE_H_ 195b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 205b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#include <fst/disambiguate.h> 215b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#include <fst/script/arg-packs.h> 225b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#include <fst/script/fst-class.h> 235b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#include <fst/script/weight-class.h> 245b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 255b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkinnamespace fst { 265b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkinnamespace script { 275b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 285b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkinstruct DisambiguateOptions { 295b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin float delta; 305b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin WeightClass weight_threshold; 315b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin int64 state_threshold; 325b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin int64 subsequential_label; 335b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 345b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin explicit DisambiguateOptions(float d = fst::kDelta, 355b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin WeightClass w = 365b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin fst::script::WeightClass::Zero(), 375b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin int64 n = fst::kNoStateId, int64 l = 0) 385b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin : delta(d), weight_threshold(w), state_threshold(n), 395b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin subsequential_label(l) {} 405b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin}; 415b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 425b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkintypedef args::Package<const FstClass&, MutableFstClass*, 435b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin const DisambiguateOptions &> DisambiguateArgs; 445b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 455b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkintemplate<class Arc> 465b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkinvoid Disambiguate(DisambiguateArgs *args) { 475b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin const Fst<Arc> &ifst = *(args->arg1.GetFst<Arc>()); 485b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin MutableFst<Arc> *ofst = args->arg2->GetMutableFst<Arc>(); 495b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin const DisambiguateOptions &opts = args->arg3; 505b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 515b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin fst::DisambiguateOptions<Arc> detargs; 525b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin detargs.delta = opts.delta; 535b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin detargs.weight_threshold = 545b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin *(opts.weight_threshold.GetWeight<typename Arc::Weight>()); 555b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin detargs.state_threshold = opts.state_threshold; 565b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin detargs.subsequential_label = opts.subsequential_label; 575b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 585b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin Disambiguate(ifst, ofst, detargs); 595b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin} 605b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 615b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkinvoid Disambiguate(const FstClass &ifst, MutableFstClass *ofst, 625b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin const DisambiguateOptions &opts = 635b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin fst::script::DisambiguateOptions()); 645b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 655b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin} // namespace script 665b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin} // namespace fst 675b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin 685b6dc79427b8f7eeb6a7ff68034ab8548ce670eaAlexander Gutkin#endif // FST_SCRIPT_DISAMBIGUATE_H_ 69