Program: 52663
Project: 52663
Buggy source:
private void collect(BatchResult batchResult,Path p,int maxAmbigiousWordCount,int resultLimit) throws IOException {
  LinkedHashSet<String> sentences=getSentences(p);
  List<List<String>> group=group(new ArrayList<>(sentences),5000);
  for (  List<String> strings : group) {
    List<String> normalized=new ArrayList<>();
    for (    String sentence : strings) {
      sentence=sentence.replaceAll("String_Node_Str","String_Node_Str");
      sentence=sentence.replaceAll("String_Node_Str","String_Node_Str");
      sentence=sentence.replaceAll("String_Node_Str","String_Node_Str");
      normalized.add(sentence);
    }
    LinkedHashSet<String> toProcess=new LinkedHashSet<>();
    for (    String s : normalized) {
      boolean ok=true;
      for (      Predicate<String> ignorePredicate : ignoreSentencePredicates) {
        if (ignorePredicate.test(s)) {
          ok=false;
          break;
        }
      }
      if (!ok) {
        batchResult.ignoredSentences.add(s);
      }
 else {
        toProcess.add(s);
      }
    }
    Log.info("String_Node_Str",batchResult.acceptedSentences.size());
    Log.info(morphology.getCache().toString());
    for (    String sentence : toProcess) {
      ResultSentence r=ruleBasedDisambiguator.disambiguate(sentence);
      if (r.ambiguousWordCount() > maxAmbigiousWordCount) {
        continue;
      }
      if (r.zeroAnalysisCount() > 0) {
        continue;
      }
      if (r.allIgnoredCount() > 0) {
        Log.warn("String_Node_Str",r.sentence);
        continue;
      }
      boolean sentenceOk=true;
      for (      WordAnalysis an : r.sentenceAnalysis) {
        boolean ok=true;
        for (        Predicate<WordAnalysis> predicate : acceptWordPredicates) {
          if (!predicate.test(an)) {
            ok=false;
            break;
          }
        }
        if (!ok) {
          batchResult.ignoredSentences.add(sentence);
          sentenceOk=false;
          break;
        }
      }
      if (sentenceOk) {
        batchResult.acceptedSentences.add(sentence);
        batchResult.results.add(r);
        if (resultLimit > 0 && batchResult.results.size() > resultLimit) {
          return;
        }
      }
    }
  }
}

Fixed version (ground truth):
private void collect(BatchResult batchResult,Collection<String> sentences,int maxAmbigiousWordCount,int resultLimit) throws IOException {
  List<List<String>> group=group(new ArrayList<>(sentences),5000);
  for (  List<String> strings : group) {
    LinkedHashSet<String> toProcess=getAccpetableSentences(strings);
    Log.info("String_Node_Str",batchResult.acceptedSentences.size());
    Log.info(morphology.getCache().toString());
    for (    String sentence : toProcess) {
      ResultSentence r=ruleBasedDisambiguator.disambiguate(sentence);
      if (r.ambiguousWordCount() > maxAmbigiousWordCount) {
        continue;
      }
      if (r.zeroAnalysisCount() > 0) {
        continue;
      }
      if (r.allIgnoredCount() > 0) {
        Log.warn("String_Node_Str",r.sentence);
        continue;
      }
      boolean sentenceOk=true;
      for (      WordAnalysis an : r.sentenceAnalysis) {
        boolean ok=true;
        for (        Predicate<WordAnalysis> predicate : acceptWordPredicates) {
          if (!predicate.test(an)) {
            ok=false;
            break;
          }
        }
        if (!ok) {
          batchResult.ignoredSentences.add(sentence);
          sentenceOk=false;
          break;
        }
      }
      if (sentenceOk) {
        batchResult.acceptedSentences.add(sentence);
        batchResult.results.add(r);
        if (resultLimit > 0 && batchResult.results.size() > resultLimit) {
          return;
        }
      }
    }
  }
}