in opennlp-similarity/src/main/java/opennlp/tools/parse_thicket/pattern_structure/LinguisticPatternStructure.java [49:120]
public int AddIntent(List<List<ParseTreeChunk>> intent, LinkedHashSet<Integer>extent,int generator) {
LOG.debug("debug called for {}", intent);
//printLattice();
int generator_tmp = GetMaximalConcept(intent, generator);
generator = generator_tmp;
if (conceptList.get(generator).intent.equals(intent)) {
LOG.debug("at generator: {}", conceptList.get(generator).intent);
LOG.debug("to add: {}", intent);
LOG.debug("already generated");
AddExtentToAncestors(extent, generator);
return generator;
}
Set<Integer> generatorParents = conceptList.get(generator).parents;
Set<Integer> newParents = new HashSet<>();
for (int candidate : generatorParents) {
if (!intent.containsAll(conceptList.get(candidate).intent)) {
List<List<ParseTreeChunk>> intersection = md
.matchTwoSentencesGroupedChunksDeterministic(intent, conceptList.get(candidate).intent);
LinkedHashSet<Integer> new_extent = new LinkedHashSet<>();
new_extent.addAll(conceptList.get(candidate).extent);
new_extent.addAll(extent);
if (intent.size()!=intersection.size()){
LOG.debug("recursive call (inclusion)");
LOG.debug("{}----{}", intent, intersection);
candidate = AddIntent(intersection,new_extent, candidate);
}
}
boolean addParents = true;
// System.out.println("now iterating over parents");
Iterator<Integer> iterator = newParents.iterator();
while (iterator.hasNext()) {
Integer parent = iterator.next();
if (conceptList.get(parent).intent.containsAll(conceptList.get(candidate).intent)) {
addParents = false;
break;
}
else {
if (conceptList.get(candidate).intent.containsAll(conceptList.get(parent).intent)) {
iterator.remove();
}
}
}
if (addParents) {
newParents.add(candidate);
}
}
LOG.debug("size of lattice: {}", conceptList.size());
PhraseConcept newConcept = new PhraseConcept();
newConcept.setIntent(intent);
LinkedHashSet<Integer> new_extent = new LinkedHashSet<>();
new_extent.addAll(conceptList.get(generator).extent);
new_extent.addAll(extent);
newConcept.addExtents(new_extent);
newConcept.setPosition(conceptList.size());
conceptList.add(newConcept);
conceptList.get(generator).parents.add(newConcept.position);
conceptList.get(newConcept.position).children.add(generator);
for (int newParent: newParents) {
if (conceptList.get(generator).parents.contains(newParent)) {
conceptList.get(generator).parents.remove(newParent);
conceptList.get(newParent).children.remove(generator);
}
conceptList.get(newConcept.position).parents.add(newParent);
conceptList.get(newParent).addExtents(new_extent);
AddExtentToAncestors(new_extent, newParent);
conceptList.get(newParent).children.add(newConcept.position);
}
return newConcept.position;
}