pyfst provides a Python interface to the excellent OpenFst library. Most of the essential functionality of the library is exposed through a simplified API, allowing quick prototyping of algorithms using finite-state methods and easy visual debugging of the results obtained by applying FST operations.
For example, one might write the following code to produce the pyfst logo:
import fst # Create a first linear chain for 'py', and take its Kleen closure a = fst.linear_chain(('py',)).closure() # Create a second acceptor for 'fst' b = fst.Acceptor(a.isyms) b.add_arc(0, 1, 'fst') b.final = True # Concatenate the two transducers c = a + b # Remove ε-transitions and minimize c.remove_epsilon() c.minimize()
pyfst focuses on providing an intuitive interface to the OpenFst API and lacks support for advanced functionality such as custom semirings and non-vector FST types. However, most operations are available for standard transducers with log and tropical weights, which should be enough for the majority of basic use cases.