Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FST Determinization only works for acceptors and should be enhanced to support transducers #5

Closed
steveash opened this issue May 19, 2018 · 1 comment
Assignees
Milestone

Comments

@steveash
Copy link
Owner

Currently the Determinization implementation only works for acceptors and silently clobbers transducers by overwriting the output symbol table with input symbol ids. Determinization should be extended to support both acceptors and transducers as openfst does.

@steveash steveash added this to the v0.3.0 milestone Jul 14, 2018
@steveash steveash self-assigned this Jul 14, 2018
@steveash
Copy link
Owner Author

Re-wrote the implementation of Determinization. This supports FSA and FST Determinization now. As discussed in the OpenFST page on Determinization when determinizing transducers you have to decide what to do when the input FST is not functional (multiple output paths for a given input path. Like in OpenFST, jopenfst offers the same three options which can be configured like:

import com.github.steveash.jopenfst.operations.Determinize
import com.github.steveash.jopenfst.operations.Determinize.DeterminizeMode

new Determinize(DeterminizeMode.FUNCTIONAL).compute(myFst);

There are three DeterminizeMode options mirroring OpenFSTs:

  • If FUNCTIONAL (default) then determinize will throw if it encounters nonfunctional input
  • If NON_FUNCTIONAL then determinize will keep both paths (but that means the output wont be deterministic
  • If DISAMBIGUATE then determinize will keep the min arc of the options and output will still be deterministic

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant