public int AddIntent()

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;
	}