예제 #1
0
 /**
  * Determines if a chunk is matched by a rule element.
  *
  * @param chunk the chunk to be matched by the element
  * @param element the element to be matched against the chunk
  * @return <code>true</code> if there's a match, <code>false</code> otherwise
  */
 private boolean match(
     SyntacticChunk chunk, Element element, int baseTokenIndex, Sentence sentence) {
   boolean match;
   boolean negated;
   // Sees if the mask must or not match.
   // Negated is optional, so it can be null, true or false.
   // If null, consider as false.
   if (element.isNegated() == null) {
     match = false;
     negated = false;
   } else {
     match = element.isNegated().booleanValue();
     negated = element.isNegated().booleanValue();
   }
   for (Mask mask : element.getMask()) {
     // If the token must match the mask.
     if (!negated) {
       // If not negated, match starts as false and just one match is needed to make it true.
       if (mask.getLexemeMask() != null
           && mask.getLexemeMask().equalsIgnoreCase(chunk.toString())) {
         match = true;
       } else if (mask.getTagMask() != null && chunk.getMorphologicalTag() != null) {
         match =
             match
                 | (chunk.getMorphologicalTag().matchExact(mask.getTagMask(), false)
                     && chunk.getSyntacticTag().match(mask.getTagMask()));
       } else if (mask.getPrimitiveMask() != null /*&& chunk.getTokens().size() > 0*/
           && matchLemma(chunk.getChildChunks().get(0).getMainToken(), mask.getPrimitiveMask())) {
         match = true;
       } else if (mask.getTagReference() != null && chunk.getMorphologicalTag() != null) {
         TagMask t =
             RuleUtils.createTagMaskFromReferenceSyntatic(
                 mask.getTagReference(), sentence, baseTokenIndex);
         match =
             match
                 | (chunk.getMorphologicalTag().match(t, false)
                     && (t.getSyntacticFunction() == null || chunk.getSyntacticTag().match(t)));
       }
     } else { // The token must NOT match the mask.
       // If negated, match starts as true and just one match is needed to make it false.
       if (mask.getLexemeMask() != null
           && mask.getLexemeMask().equalsIgnoreCase(chunk.toString())) {
         match = false;
       } else if (mask.getTagMask() != null) {
         match =
             match
                 & !(chunk.getMorphologicalTag().matchExact(mask.getTagMask(), false)
                     && (mask.getTagMask().getSyntacticFunction() == null
                         || chunk.getSyntacticTag().match(mask.getTagMask())));
       } else if (mask.getPrimitiveMask() != null /*&& chunk.getTokens().size() > 0*/
           && matchLemma(chunk.getChildChunks().get(0).getMainToken(), mask.getPrimitiveMask())) {
         match = false;
       } else if (mask.getTagReference() != null) {
         TagMask t =
             RuleUtils.createTagMaskFromReferenceSyntatic(
                 mask.getTagReference(), sentence, baseTokenIndex);
         match =
             match
                 & !(chunk.getMorphologicalTag().match(t, false)
                     && (t.getSyntacticFunction() == null || chunk.getSyntacticTag().match(t)));
       }
     }
   }
   return match;
 }
예제 #2
0
 /**
  * Determines if a token is matched by a rule element.
  *
  * @param token the token to be matched by the element
  * @param element the element to be matched against the token
  * @return <code>true</code> if there's a match, <code>false</code> otherwise
  */
 private boolean match(Token token, Element element, int baseTokenIndex, Sentence sentence) {
   boolean match;
   boolean negated;
   // Sees if the mask must or not match.
   // Negated is optional, so it can be null, true or false.
   // If null, consider as false.
   if (element.isNegated() == null) {
     match = false;
     negated = false;
   } else {
     match = element.isNegated().booleanValue();
     negated = element.isNegated().booleanValue();
   }
   for (Mask mask : element.getMask()) {
     // If the token must match the mask.
     if (!negated) {
       // If not negated, match starts as false and just one match is needed to make it true.
       if (mask.getLexemeMask() != null
           && mask.getLexemeMask().equalsIgnoreCase(token.getLexeme())) {
         match = true;
       } else if (mask.getPrimitiveMask() != null && matchLemma(token, mask.getPrimitiveMask())) {
         match = true;
       } else if (mask.getTagMask() != null && token.getMorphologicalTag() != null) {
         match = match | token.getMorphologicalTag().matchExact(mask.getTagMask(), false);
       } else if (mask.getTagReference() != null && token.getMorphologicalTag() != null) {
         match =
             match
                 | token
                     .getMorphologicalTag()
                     .match(
                         RuleUtils.createTagMaskFromReference(
                             mask.getTagReference(), sentence, baseTokenIndex),
                         false);
       } else if (mask.getOutOfBounds() != null
           && (baseTokenIndex == 0 || baseTokenIndex == sentence.getTokens().size() - 1)) {
         match = false;
       }
     } else { // The token must NOT match the mask.
       // If negated, match starts as true and just one match is needed to make it false.
       if (mask.getLexemeMask() != null
           && mask.getLexemeMask().equalsIgnoreCase(token.getLexeme())) {
         match = false;
       } else if (mask.getPrimitiveMask() != null && matchLemma(token, mask.getPrimitiveMask())) {
         match = false;
       } else if (mask.getTagMask() != null
           && token != null
           && token.getMorphologicalTag() != null) {
         match = match & !token.getMorphologicalTag().matchExact(mask.getTagMask(), false);
       } else if (mask.getTagReference() != null
           && token != null
           && token.getMorphologicalTag() != null) {
         match =
             match
                 & !token
                     .getMorphologicalTag()
                     .match(
                         RuleUtils.createTagMaskFromReference(
                             mask.getTagReference(), sentence, baseTokenIndex),
                         false);
       } else if (mask.getOutOfBounds() != null
           && (baseTokenIndex == 0 || baseTokenIndex == sentence.getTokens().size() - 1)) {
         match = false;
       }
     }
   }
   return match;
 }