Class Unifier


  • public class Unifier
    extends Object
    Implements unification of features over tokens.
    Author:
    Marcin Milkowski
    • Constructor Detail

      • Unifier

        public Unifier​(Map<org.languagetool.rules.patterns.EquivalenceTypeLocator,​PatternToken> equivalenceTypes,
                       Map<String,​List<String>> equivalenceFeatures)
        Instantiates the unifier.
    • Method Detail

      • isSatisfied

        protected final boolean isSatisfied​(AnalyzedToken aToken,
                                            Map<String,​List<String>> uFeatures)
        Tests if a token has shared features with other tokens.
        Parameters:
        aToken - token to be tested
        uFeatures - features to be tested
        Returns:
        true if the token shares this type of feature with other tokens
      • startNextToken

        public final void startNextToken()
        Call after every complete token (AnalyzedTokenReadings) checked.
      • startUnify

        public final void startUnify()
        Starts testing only those equivalences that were previously matched.
      • getFinalUnificationValue

        public final boolean getFinalUnificationValue​(Map<String,​List<String>> uFeatures)
        Make sure that we really matched all the required features of the unification.
        Parameters:
        uFeatures - Features to be checked
        Returns:
        True if the token sequence has been found.
        Since:
        2.5
      • reset

        public final void reset()
        Resets after use of unification. Required.
      • getUnifiedTokens

        @Nullable
        public final @Nullable AnalyzedTokenReadings[] getUnifiedTokens()
        Gets a full sequence of filtered tokens.
        Returns:
        Array of AnalyzedTokenReadings that match equivalence relation defined for features tested, or null
      • isUnified

        public final boolean isUnified​(AnalyzedToken matchToken,
                                       Map<String,​List<String>> uFeatures,
                                       boolean lastReading,
                                       boolean isMatched)
        Tests if the token sequence is unified.

        Usage note: to test if the sequence of tokens is unified (i.e., shares a group of features, such as the same gender, number, grammatical case etc.), you need to test all tokens but the last one in the following way: call isUnified() for every reading of a token, and set lastReading to true. For the last token, check the truth value returned by this method. In previous cases, it may actually be discarded before the final check. See AbstractPatternRule for an example.

        To make it work in XML rules, the Elements built based on <token>s inside the unify block have to be processed in a special way: namely the last Element has to be marked as the last one (by using PatternToken.setLastInUnification()).
        Parameters:
        matchToken - AnalyzedToken token to unify
        lastReading - true when the matchToken is the last reading in the AnalyzedTokenReadings
        isMatched - true if the reading matches the element in the pattern rule, otherwise the reading is not considered in the unification
        Returns:
        true if the tokens in the sequence are unified
      • addNeutralElement

        public final void addNeutralElement​(AnalyzedTokenReadings analyzedTokenReadings)
        Used to add neutral elements (AnalyzedTokenReadings to the unified sequence. Useful if the sequence contains punctuation or connectives, for example.
        Parameters:
        analyzedTokenReadings - A neutral element to be added.
        Since:
        2.5