コード例 #1
0
  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;
  }