Class FST<T>


  • public final class FST<T>
    extends java.lang.Object
    Represents an finite state machine (FST), using a compact byte[] format.

    The format is similar to what's used by Morfologik (http://sourceforge.net/projects/morfologik).

    See the package documentation for some simple examples.

    • Field Detail

      • outputs

        public final Outputs<T> outputs
      • nodeCount

        public long nodeCount
      • arcCount

        public long arcCount
      • arcWithOutputCount

        public long arcWithOutputCount
      • END_LABEL

        public static final int END_LABEL
        If arc has this label then that arc is final/accepted
        See Also:
        Constant Field Values
      • DEFAULT_MAX_BLOCK_BITS

        public static final int DEFAULT_MAX_BLOCK_BITS
    • Constructor Detail

      • FST

        public FST​(DataInput in,
                   Outputs<T> outputs)
            throws java.io.IOException
        Load a previously saved FST.
        Throws:
        java.io.IOException
      • FST

        public FST​(DataInput in,
                   Outputs<T> outputs,
                   int maxBlockBits)
            throws java.io.IOException
        Load a previously saved FST; maxBlockBits allows you to control the size of the byte[] pages used to hold the FST bytes.
        Throws:
        java.io.IOException
    • Method Detail

      • sizeInBytes

        public long sizeInBytes()
        Returns bytes used to represent the FST
      • readRootArcs

        public void readRootArcs​(FST.Arc<T>[] arcs)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • getEmptyOutput

        public T getEmptyOutput()
      • save

        public void save​(DataOutput out)
                  throws java.io.IOException
        Throws:
        java.io.IOException
      • save

        public void save​(java.io.File file)
                  throws java.io.IOException
        Writes an automaton to a file.
        Throws:
        java.io.IOException
      • read

        public static <T> FST<T> read​(java.io.File file,
                                      Outputs<T> outputs)
                               throws java.io.IOException
        Reads an automaton from a file.
        Throws:
        java.io.IOException
      • targetHasArcs

        public static <T> boolean targetHasArcs​(FST.Arc<T> arc)
        returns true if the node at this address has any outgoing arcs
      • getFirstArc

        public FST.Arc<T> getFirstArc​(FST.Arc<T> arc)
        Fills virtual 'start' arc, ie, an empty incoming arc to the FST's start node
      • readLastTargetArc

        public FST.Arc<T> readLastTargetArc​(FST.Arc<T> follow,
                                            FST.Arc<T> arc,
                                            FST.BytesReader in)
                                     throws java.io.IOException
        Follows the follow arc and reads the last arc of its target; this changes the provided arc (2nd arg) in-place and returns it.
        Returns:
        Returns the second argument (arc).
        Throws:
        java.io.IOException
      • readFirstTargetArc

        public FST.Arc<T> readFirstTargetArc​(FST.Arc<T> follow,
                                             FST.Arc<T> arc,
                                             FST.BytesReader in)
                                      throws java.io.IOException
        Follow the follow arc and read the first arc of its target; this changes the provided arc (2nd arg) in-place and returns it.
        Returns:
        Returns the second argument (arc).
        Throws:
        java.io.IOException
      • readFirstRealTargetArc

        public FST.Arc<T> readFirstRealTargetArc​(long node,
                                                 FST.Arc<T> arc,
                                                 FST.BytesReader in)
                                          throws java.io.IOException
        Throws:
        java.io.IOException
      • readNextArc

        public FST.Arc<T> readNextArc​(FST.Arc<T> arc,
                                      FST.BytesReader in)
                               throws java.io.IOException
        In-place read; returns the arc.
        Throws:
        java.io.IOException
      • readNextArcLabel

        public int readNextArcLabel​(FST.Arc<T> arc,
                                    FST.BytesReader in)
                             throws java.io.IOException
        Peeks at next arc's label; does not alter arc. Do not call this if arc.isLast()!
        Throws:
        java.io.IOException
      • readNextRealArc

        public FST.Arc<T> readNextRealArc​(FST.Arc<T> arc,
                                          FST.BytesReader in)
                                   throws java.io.IOException
        Never returns null, but you should never call this if arc.isLast() is true.
        Throws:
        java.io.IOException
      • findTargetArc

        public FST.Arc<T> findTargetArc​(int labelToMatch,
                                        FST.Arc<T> follow,
                                        FST.Arc<T> arc,
                                        FST.BytesReader in)
                                 throws java.io.IOException
        Finds an arc leaving the incoming arc, replacing the arc in place. This returns null if the arc was not found, else the incoming arc.
        Throws:
        java.io.IOException
      • getNodeCount

        public long getNodeCount()
      • getArcCount

        public long getArcCount()
      • getArcWithOutputCount

        public long getArcWithOutputCount()