private void findSpecs() throws TeEngineMlException, RuleBaseException {
   this.specs = new LinkedHashSet<RuleSubstituteNodeSpecification<T>>();
   for (ExtendedNode node : TreeIterator.iterableTree(treeAndParentMap.getTree())) {
     if (isRelevantNode(node)) {
       if (InfoObservations.infoHasLemma(node.getInfo())) {
         LemmaAndPos lemmaAndPos =
             new LemmaAndPos(
                 InfoGetFields.getLemma(node.getInfo()),
                 InfoGetFields.getPartOfSpeechObject(node.getInfo()));
         ImmutableSet<T> rules = getRulesForLemmaAndPos(lemmaAndPos);
         for (T rule : rules) {
           if (isRelevantRule(rule)) {
             NodeInfo newNodeInfo =
                 new DefaultNodeInfo(
                     rule.getRhsLemma(),
                     rule.getRhsLemma(),
                     node.getInfo().getNodeInfo().getSerial(),
                     node.getInfo().getNodeInfo().getNamedEntityAnnotation(),
                     new DefaultSyntacticInfo(rule.getRhsPos()));
             RuleSubstituteNodeSpecification<T> spec =
                 createSpec(node, newNodeInfo, ruleBaseName, rule);
             // new RuleSubstituteNodeSpecification<T>(node, newNodeInfo,
             // node.getInfo().getAdditionalNodeInformation(), rule.getConfidence(), ruleBaseName,
             // rule);
             addAdditionalDescription(spec, rule);
             specs.add(spec);
           }
         }
       }
     }
   }
 }
  protected boolean ruleLhsEqualsRhs(T rule) {
    boolean ret = false;
    boolean lemmasAreEqual = false;
    if (Constants.USE_ADVANCED_EQUALITIES) {
      lemmasAreEqual = AdvancedEqualities.lemmasEqual(rule.getLhsLemma(), rule.getRhsLemma());
    } else {
      lemmasAreEqual = Equalities.lemmasEqual(rule.getLhsLemma(), rule.getRhsLemma());
    }
    boolean posesAreEqual = false;
    if (Constants.USE_ADVANCED_EQUALITIES) {
      posesAreEqual = AdvancedEqualities.posEqual(rule.getLhsPos(), rule.getRhsPos());
    } else {
      posesAreEqual = Equalities.posEqual(rule.getLhsPos(), rule.getRhsPos());
    }

    if (lemmasAreEqual && posesAreEqual) {
      ret = true;
    }

    return ret;
  }