Class SubjectVerbAgreementRule

java.lang.Object
org.languagetool.rules.Rule
org.languagetool.rules.de.SubjectVerbAgreementRule

public class SubjectVerbAgreementRule extends Rule
Check subject verb agreement for verb forms "ist", "sind", "war" and "waren". For example, it detects the errors in:
  • Das Auto sind schnell.
  • Das Auto waren schnell.
  • Die Autos ist schnell.
  • Die Katze und der Hund ist schön.
See our wiki for documentation of the steps this rule relies on.
Since:
2.9
  • Field Details

  • Constructor Details

    • SubjectVerbAgreementRule

      public SubjectVerbAgreementRule(ResourceBundle messages, German language)
  • Method Details

    • getId

      public String getId()
      Description copied from class: Rule
      A string used to identify the rule in e.g. configuration files. This string is supposed to be unique and to stay the same in all upcoming versions of LanguageTool. It's supposed to contain only the characters A-Z and the underscore.
      Specified by:
      getId in class Rule
    • getDescription

      public String getDescription()
      Description copied from class: Rule
      A short description of the error this rule can detect, usually in the language of the text that is checked.
      Specified by:
      getDescription in class Rule
    • estimateContextForSureMatch

      public int estimateContextForSureMatch()
      Description copied from class: Rule
      A number that estimates how many words there must be after a match before we can be (relatively) sure the match is valid. This is useful for check-as-you-type, where a match might occur and the word that gets typed next makes the match disappear (something one would obviously like to avoid). Note: this may over-estimate the real context size. Returns -1 when the sentence needs to end to be sure there's a match.
      Overrides:
      estimateContextForSureMatch in class Rule
    • getAntiPatterns

      public List<DisambiguationPatternRule> getAntiPatterns()
      Description copied from class: Rule
      Overwrite this to avoid false alarms by ignoring these patterns - note that your Rule.match(AnalyzedSentence) method needs to call Rule.getSentenceWithImmunization(org.languagetool.AnalyzedSentence) for this to be used and you need to check AnalyzedTokenReadings.isImmunized()
      Overrides:
      getAntiPatterns in class Rule
    • getUrl

      public URL getUrl()
      Description copied from class: Rule
      An optional URL describing the rule match in more detail. Typically points to a dictionary or grammar website with explanations and examples. Will return null for rules that have no URL.
      Overrides:
      getUrl in class Rule
    • match

      public RuleMatch[] match(AnalyzedSentence sentence) throws IOException
      Description copied from class: Rule
      Check whether the given sentence matches this error rule, i.e. whether it contains the error detected by this rule. Note that the order in which this method is called is not always guaranteed, i.e. the sentence order in the text may be different from the order in which you get the sentences (this may be the case when LanguageTool is used as a LibreOffice/OpenOffice add-on, for example). In other words, implementations must be stateless, so that a previous call to this method has no influence on later calls.
      Specified by:
      match in class Rule
      Parameters:
      sentence - a pre-analyzed sentence
      Returns:
      an array of RuleMatch objects
      Throws:
      IOException
    • getSingularMatchOrNull

      @Nullable private RuleMatch getSingularMatchOrNull(AnalyzedTokenReadings[] tokens, int i, AnalyzedTokenReadings token, String tokenStr, AnalyzedSentence sentence) throws IOException
      Throws:
      IOException
    • getPluralMatchOrNull

      @Nullable private RuleMatch getPluralMatchOrNull(AnalyzedTokenReadings[] tokens, int i, AnalyzedTokenReadings token, String tokenStr, AnalyzedSentence sentence)
    • isCurrency

      private boolean isCurrency(AnalyzedTokenReadings token)
    • prevChunkIsNominative

      boolean prevChunkIsNominative(AnalyzedTokenReadings[] tokens, int startPos)
    • hasUnknownTokenToTheLeft

      private boolean hasUnknownTokenToTheLeft(AnalyzedTokenReadings[] tokens, int startPos)
    • hasUnknownTokenToTheRight

      private boolean hasUnknownTokenToTheRight(AnalyzedTokenReadings[] tokens, int startPos)
    • hasUnknownTokenAt

      private boolean hasUnknownTokenAt(AnalyzedTokenReadings[] tokens, int startPos, int endPos)
    • hasQuestionPronounToTheLeft

      private boolean hasQuestionPronounToTheLeft(AnalyzedTokenReadings[] tokens, int startPos)
    • hasVerbToTheLeft

      private boolean hasVerbToTheLeft(AnalyzedTokenReadings[] tokens, int startPos)
    • containsRegexToTheLeft

      private boolean containsRegexToTheLeft(String regex, AnalyzedTokenReadings[] tokens, int startPos)
    • containsOnlyInfinitivesToTheLeft

      private boolean containsOnlyInfinitivesToTheLeft(AnalyzedTokenReadings[] tokens, int startPos) throws IOException
      Throws:
      IOException
    • isFollowedByNominativePlural

      boolean isFollowedByNominativePlural(AnalyzedTokenReadings[] tokens, int startPos)
    • getSingularFor

      private String getSingularFor(String token)
    • getPluralFor

      private String getPluralFor(String token)