コード例 #1
0
  /**
   * @return false if neither the verb @param token1 (if any) nor @param token2 match @param person
   *     and @param number, and none of them is "und" or "," if a finite verb is found, it is saved
   *     in finiteVerb
   */
  private boolean verbDoesMatchPersonAndNumber(
      final AnalyzedTokenReadings token1,
      final AnalyzedTokenReadings token2,
      final String person,
      final String number) {
    if (token1.getToken().equals(",")
        || token1.getToken().equals("und")
        || token2.getToken().equals(",")
        || token2.getToken().equals("und")) {
      return true;
    }

    boolean foundFiniteVerb = false;

    if (isFiniteVerb(token1)) {
      foundFiniteVerb = true;
      finiteVerb = token1;
      if (token1.hasPartialPosTag(":" + person + ":" + number)) {
        return true;
      }
    }

    if (isFiniteVerb(token2)) {
      foundFiniteVerb = true;
      finiteVerb = token2;
      if (token2.hasPartialPosTag(":" + person + ":" + number)) {
        return true;
      }
    }

    return !foundFiniteVerb;
  }
コード例 #2
0
 @Nullable
 private String baseForThirdPersonSingularVerb(String word) throws IOException {
   List<AnalyzedTokenReadings> readings = tagger.tag(Collections.singletonList(word));
   for (AnalyzedTokenReadings reading : readings) {
     if (reading.hasPartialPosTag("VER:3:SIN:")) {
       return reading.getReadings().get(0).getLemma();
     }
   }
   return null;
 }
コード例 #3
0
 /**
  * @return a list of pronouns which match the person and number of @param verb
  * @param toUppercase true when the suggestions should be capitalized
  */
 private List<String> getPronounSuggestions(
     final AnalyzedTokenReadings verb, final boolean toUppercase) {
   List<String> result = new ArrayList<>();
   if (verb.hasPartialPosTag(":1:SIN")) {
     result.add("ich");
   }
   if (verb.hasPartialPosTag(":2:SIN")) {
     result.add("du");
   }
   if (verb.hasPartialPosTag(":3:SIN")) {
     result.add("er");
     result.add("sie");
     result.add("es");
   }
   if (verb.hasPartialPosTag(":1:PLU")) {
     result.add("wir");
   }
   if (verb.hasPartialPosTag(":2:PLU")) {
     result.add("ihr");
   }
   if (verb.hasPartialPosTag(":3:PLU") && !result.contains("sie")) { // do not add "sie" twice
     result.add("sie");
   }
   if (toUppercase) {
     for (int i = 0; i < result.size(); ++i) {
       result.set(i, StringTools.uppercaseFirstChar(result.get(i)));
     }
   }
   return result;
 }
コード例 #4
0
  /**
   * @return true if the verb @param token (if it is a verb) matches @param person and @param
   *     number, and matches no other person/number
   */
  private boolean hasUnambiguouslyPersonAndNumber(
      final AnalyzedTokenReadings tokenReadings, final String person, final String number) {
    if (tokenReadings.getToken().length() == 0
        || (Character.isUpperCase(tokenReadings.getToken().charAt(0))
            && !(tokenReadings.getStartPos() == 0))
        || !tokenReadings.hasPartialPosTag("VER")) return false;

    for (AnalyzedToken analyzedToken : tokenReadings) {
      final String postag = analyzedToken.getPOSTag();
      if (postag.contains("_END")) // ignore SENT_END and PARA_END
      continue;
      if (!postag.contains(":" + person + ":" + number)) return false;
    } // for each reading

    return true;
  }
コード例 #5
0
 /** @return true if @param token is a finite verb, and it is no participle, pronoun or number */
 private boolean isFiniteVerb(final AnalyzedTokenReadings token) {
   if (token.getToken().length() == 0
       || (Character.isUpperCase(token.getToken().charAt(0)) && token.getStartPos() != 0)
       || !token.hasPartialPosTag("VER")
       || token.hasPartialPosTag("PA2")
       || token.hasPartialPosTag("PRO:")
       || token.hasPartialPosTag("ZAL")) {
     return false;
   }
   return (token.hasPartialPosTag(":1:")
       || token.hasPartialPosTag(":2:")
       || token.hasPartialPosTag(":3:"));
 }