Gfsm::Automaton - object-oriented interface to libgfsm finite-state automata |
Gfsm::Automaton - object-oriented interface to libgfsm finite-state automata
use Gfsm;
##------------------------------------------------------------ ## Constructors, etc. $fsm = Gfsm::Automaton->new(); $fsm = Gfsm::Automaton->new($is_transducer,$srtype,$n_preallocated_states); $fsm2 = $fsm->clone(); # copy constructor $fsm2 = $fsm->shadow(); # copy non-structural elements $fsm2->assign($fsm1); # assigns $fsm1 to $fsm2 $fsm->clear(); # clear automaton structure
##------------------------------------------------------------ ## Accessors/Manipulators: Properties $bool = $fsm->is_transducer(); # get 'is_transducer' flag $bool = $fsm->is_transducer($bool); # ... or set it $bool = $fsm->is_weighted(?$bool); # get/set 'is_weighted' flag $mode = $fsm->sort_mode(?$mode); # get/set sort-mode flag (dangerous) $bool = $fsm->is_deterministic(?$bool); # get/set 'is_deterministic' flag (dangerous) $srtype = $fsm->semiring_type(?$srtype); # get/set semiring type $n = $fsm->n_states(); # get number of states $n = $fsm->n_final_states(); # get number of final states $n = $fsm->n_arcs(); # get number of arcs $id = $fsm->root(?$id); # get/set id of initial state $bool = $fsm->has_state($id); # check whether a state exists $bool = $fsm->is_cyclic(); # check for cyclicity
##------------------------------------------------------------ ## Accessors/Manipulators: States $id = $fsm->add_state(); # add a new state $id = $fsm->ensure_state($id); # ensure that a state exists $fsm->remove_state($id); # remove a state from an FSM $bool = $fsm->is_final($id,?$bool); # get/set final-flag for state $id $deg = $fsm->out_degree($id); # get number of outgoing arcs for state $id $w = $fsm->final_weight($id,?$w); # get/set final weight for state $id $fsm->renumber_states(); # close gaps in stateid numbering $fsm->statesort_aff(); # ... same thing $fsm->statesort_dfs(); # depth-first state sort $fsm->statesort_bfs(); # breadth-first state sort
##------------------------------------------------------------ ## Accessors/Manipulators: Arcs $fsm->add_arc($fsm,$id_from,$id_to,$lab_lo,$lab_hi,$weight); # add an arc $fsm->arcsort($fsm,$mode); # sort automaton arcs $ai = Gfsm::ArcIter->new(); # create new arc-iterator $ai = Gfsm::ArcIter->new($fsm,$stateid); # create & open $ai->open($fsm,$stateid); # open outgoing arcs from $stateid in $fsm $ai->reset(); # reset to 1st outgoing arc $ai->close(); # close an arc iterator $bool = $ai->ok(); # check iterator validity $ai->remove(); # remove current arc from the automaton $stateid = $ai->target(?$stateid); # get/set current arc target StateId $lab = $ai->lower(?$lab); # get/set current arc lower label $lab = $ai->upper(?$lab); # get/set current arc upper label $weight = $ai->weight(?$weight); # get/set current arc weight $ai->next(); # increment to next outgoing arc $ai->seek_lower($lab); # (inclusive) seek next arc with lower label $lab $ai->seek_upper($lab); # (inclusive) seek next arc with upper label $lab $ai->seek_both($lo,$hi); # (inclusive) seek next arc with labels $lo,$hi
##-------------------------------------------------------------- ## I/O $fsm_or_undef = $fsm->load($filename_or_handle); # load binary file (class method ok) $fsm_or_undef = $fsm->save($filename_or_handle); # save binary file $fsm_or_undef = $fsm->load_string($buffer); # load from in-memory buffer $string (class method ok) $fsm_or_undef = $fsm->save_string($buffer); # save to in-memory buffer $string $fsm_or_undef = $fsm->compile($filename_or_handle, %options); # compile AT&T-style text format file (transducer format only; class method ok) $fsm_or_undef = $fsm->print_att($filename_or_handle, %options); # save AT&T-style text format file (transducer format only) $fsm_or_undef = $fsm->compile_string($string, ?$abet_lo, ?$abet_hi, ?$abet_states); # compile AT&T-style text format $string (class method ok) $fsm_or_undef = $fsm->print_att_string($string, ?$abet_lo, ?$abet_hi, ?$abet_states); # save AT&T-style text format $string $bool = $fsm->draw_vcg($filename_or_handle,%options); # save in VCG format $bool = $fsm->draw_dot($filename_or_handle,%options); # save in DOT format $bool = $fsm->viewps(%options); # for debugging
##-------------------------------------------------------------- ## Algebra (constructive) $fsm = $fsm1->optional(); # set optional $fsm = $fsm1->closure(); # reflexive + transitive closure $fsm = $fsm1->closure(1); # transitive closure $fsm = $fsm1->n_closure($n); # n-ary closure $fsm = $fsm1->compact($rmeps); # heuristic compaction (encoded minimization) $fsm = $fsm1->complement(); # lower complement wrt. internal alphabet $fsm = $fsm1->complement($abet); # lower complement wrt. alphabet $abet $sinkid = $fsm->complete($abet); # complete lower wrt. $abet, returns sink-state Id $fsm = $fsm1->compose($fsm2); # transducer composition $fsm = $fsm1->concat($fsm2); # concatenate automata $fsm = $fsm1->connect(); # remove non co-accessible states $fsm = $fsm1->determinize(); # acceptor determinization $fsm = $fsm1->difference($fsm2); # lower difference ($fsm,$key) = $fsm1->encode($key,$encode_labels,$encode_weights); # encode labels and/or weights $fsm = $fsm1->decode($key,$decode_labels,$decode_weights); # ... or decode them $fsm = $fsm1->insert_automaton($qfrom,$qto,$fsm2,$w); # insert a whole automaton $fsm = $fsm1->intersect($fsm2); # lower acceptor intersection $fsm = $fsm1->invert(); # invert transdcuer sides $fsm = $fsm1->minimize($rmeps); # acceptor minimization $fsm = $fsm1->product($fsm2); # compute Cartesian product of acceptors $fsm = $fsm1->project($side); # project 1 side of a transducer $fsm = $fsm1->replace($lo,$hi,$fsm2); # replace arcs over ($lo:$hi) with $fsm2 in $fsm1 $fsm = $fsm1->rmepsilon(); # remove epsilon-arcs $fsm = $fsm1->union($fsm2); # compute automaton union
##-------------------------------------------------------------- ## Algebra ((pseudo-)destructive) $fsm->_closure(); # destructive closure #... etc.
##-------------------------------------------------------------- ## Composition (low-level) $fsmout = $fsm1->compose_full($fsm2,$fsmout); # mid-level composition
##-------------------------------------------------------------- ## Lookup $fsm = $fst->lookup($labs); # string+fst composition: $fsm=compose(id($labs),$fst) $fsm = $fst->lookup($labs,$fsm); # ... specifying result fsm $fsm = $fst->lookup($labs,$fsm,$maxq); # ... specifying result and result size limit ($fsm,$map) = $fst->lookup_full($labs); # ... returning state-id map ($fsm,$map) = $fst->lookup_full($labs,$fsm); # ... specifying result ($fsm,$map) = $fst->lookup_full($labs,$fsm,$maxq); # ... specifying result and size limit $map = $fst->lookup_full($labs,$fsm,$maxq); # ... in scalar context returns only map. $trellis = $fst->lookup_viterbi($labs); # Viterbi trellis construction
##-------------------------------------------------------------- ## Serialization $paths = $fsm->paths(); # enumerate paths (non-cyclic $fsm only!) $paths = $trellis->viterbi_trellis_paths(); # enumerate Viterbi trellis paths $best = $trellis->viterbi_trellis_bestpath(); # get best Viterbi trellis path $arcpaths = $fsm->arcpaths(); # enumerate alignments (packed) @arcs = Gfsm::unpack_arcpath($arcpath); # ... get all arcs in an arc-path ($q,$r,$lo,$hi,$w) = Gfsm::unpack_arc($arc); # ... unpack a single arc
##-------------------------------------------------------------- ## Tries $trie = Gfsm::Automaton->newTrie; $qid = $trie->add_path(\@lo,\@hi); $qid = $trie->add_path(\@lo,\@hi, $w); $qid = $trie->add_path(\@lo,\@hi, $w, $add_to_arcs, $add_to_state_final, $add_to_path_final); ($qid, $lo_i,$hi_i,$w_last) = $trie->find_prefix(\@lo,\@hi); $qids = $trie->add_path_states(\@lo,\@hi); $qids = $trie->add_path_states(\@lo,\@hi, $w); $qids = $trie->add_path_states(\@lo,\@hi, $w, $add_to_arcs, $add_to_state_final, $add_to_path_final); ($qids,$lo_i,$hi_i,$w_last) = $trie->find_prefix_states(\@lo,\@hi); $qid_to = $trie->find_arc_lower($qid_from, $lab_lo); ##-- target state or Gfsm::noState() $qid_to = $trie->find_arc_upper($qid_from, $lab_hi); ##-- target state or Gfsm::noState() $qid_to = $trie->get_arc_lower($qid_from, $lab_lo); ##-- find or insert arc $qid_to = $trie->get_arc_upper($qid_from, $lab_hi); ##-- find or insert arc
Not yet written.
Probably many.
Gfsm(3perl)
,
gfsmutils(1)
.
Bryan Jurish <moocow@cpan.org>
Copyright (C) 2005-2014 by Bryan Jurish
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.14.2 or, at your option, any later version of Perl 5 you may have available.
Gfsm::Automaton - object-oriented interface to libgfsm finite-state automata |