public List<SortableSemanticModel_Old> hypothesize( boolean useCorrectTypes, int numberOfCRFCandidates) { Set<Node> addedNodes = new HashSet< Node>(); // They should be deleted from the graph after computing the semantic models logger.info("finding candidate steiner sets ... "); CandidateSteinerSets candidateSteinerSets = getCandidateSteinerSets(columnNodes, useCorrectTypes, numberOfCRFCandidates, addedNodes); if (candidateSteinerSets == null || candidateSteinerSets.getSteinerSets() == null || candidateSteinerSets.getSteinerSets().isEmpty()) { logger.error("there is no candidate set of steiner nodes."); return null; } logger.info("number of steiner sets: " + candidateSteinerSets.numberOfCandidateSets()); logger.info("updating weights according to training data ..."); long start = System.currentTimeMillis(); this.updateWeights(); long updateWightsElapsedTimeMillis = System.currentTimeMillis() - start; logger.info("time to update weights: " + (updateWightsElapsedTimeMillis / 1000F)); logger.info("computing steiner trees ..."); List<SortableSemanticModel_Old> sortableSemanticModels = new ArrayList<SortableSemanticModel_Old>(); int count = 1; for (SteinerNodes sn : candidateSteinerSets.getSteinerSets()) { logger.debug("computing steiner tree for steiner nodes set " + count + " ..."); logger.debug(sn.getScoreDetailsString()); DirectedWeightedMultigraph<Node, LabeledLink> tree = computeSteinerTree(sn.getNodes()); count++; if (tree != null) { SemanticModel sm = new SemanticModel( new RandomGUID().toString(), tree, columnNodes, sn.getMappingToSourceColumns()); SortableSemanticModel_Old sortableSemanticModel = new SortableSemanticModel_Old(sm, sn); sortableSemanticModels.add(sortableSemanticModel); } if (count == ModelingConfigurationRegistry.getInstance() .getModelingConfiguration( ContextParametersRegistry.getInstance() .getContextParameters(ontologyManager.getContextId()) .getKarmaHome()) .getNumCandidateMappings()) break; } Collections.sort(sortableSemanticModels); // logger.info("results are ready ..."); // return sortableSemanticModels; List<SortableSemanticModel_Old> uniqueModels = new ArrayList<SortableSemanticModel_Old>(); SortableSemanticModel_Old current, previous; if (sortableSemanticModels != null) { if (sortableSemanticModels.size() > 0) uniqueModels.add(sortableSemanticModels.get(0)); for (int i = 1; i < sortableSemanticModels.size(); i++) { current = sortableSemanticModels.get(i); previous = sortableSemanticModels.get(i - 1); if (current.getScore() == previous.getScore() && current.getCost() == previous.getCost()) continue; uniqueModels.add(current); } } logger.info("results are ready ..."); return uniqueModels; }